2017-03-14 6 views
-2

私は特定のアルゴリズムを実装しています。私はこのアルゴリズムで使用しますmap<string,map<string,double>>。それは完全に動作し、正しい結果が得られますが、unordered_map<string,map<string,double>>map<string,map<string,double>>を変更すると、特定の入力に対してアルゴリズムが機能しなくなります。map対unordered map

unordered_mapmapの違いに何か不足しているかどうか尋ねたいと思います。これを引き起こす可能性のあるものはありますか?

EDIT:Floyd-Warshallアルゴリズムですが、データのソートに問題はないと思います。私がマップを使用していることは、2つのノード間のエッジ値に関する情報を持つ行列を作成することに過ぎません。

+0

どのアルゴリズムですか? 「仕事が止まる」とはどういう意味ですか? – user1810087

+0

あなたのプログラムがある時点で未定義の動作を引き起こしている可能性があります。これは 'map <,>'で幸いなことに起こりますが、 'unordered_map <,>'ではできません。 [MVCE](https://stackoverflow.com/help/mcve)を投稿してください。 – cdhowie

+0

Floyd-Warshall ..私はそれをリリースすることはできません。そのため、これを引き起こす相違があるかどうか尋ねています。私は違いがあるべきではないと思う。 unordered_map >の場合は時間の複雑さ – scarface

答えて

0

はい、unordered_mapには順序付けられていないデータが含まれています。したがって、アルゴリズムの順序付けされたデータが必要な場合、alogirtmは失敗します。

1

どのアルゴリズムがあるかによって異なります。 mapは自動的にその要素をキーでソートしますが、unordered_mapはそれを気にしません。

したがって、それらのデータに含まれるデータは同じでも、順序が違うため、結果が妨げられている可能性があります。

mapは、静的データに最適です。キーが順序付けされているため、物事をより迅速に見つけることができます。ただし、ソートすると時間がかかることがありますので、mapが必要ですが、常に変更されますが、unordered_mapはより高速なオプションになります。

+0

編集 - >アルゴリズムを追加 – scarface

+0

@scarfaceコードを投稿してください。 – Havenard

+1

*「 '' map''は静的なデータに最適です。キーが順序付けされているため、物事をより早く見つけることができます。 "*私はこの主張に異議を申し立てます。 'unordered_map 'のルックアップは平均O(1)時間の複雑さを有するが、' map'のルックアップはO(log n)時間の複雑さを有する。ウォールタイムで実際に速くなるかどうかは、要素数、順序付けられていないマップの衝突数、アプリケーションのアクセスパターンによって決まります。 – cdhowie

0

私の質問の答えは、mapunordered_mapの間に他の根本的な違いはありません。ソートされたデータを必要とせず、unordered_mapmapを変更するだけで、すべてが正常です。

ソートされたデータを除いて、これらの2つの間に違いはないとは言い難いと思います。