23

STL マップは注文されていますか?

具体的には、 std::map が注文されているかどうかを知る必要があります。したがって、それを反復すると、最初の挿入文字列が最初に反復されます。

それで、以下はA、C、Bを一貫して繰り返しますか?

std::map<string,string> str_map;

str_map.insert(std::make_pair("A","Data"));
str_map.insert(std::make_pair("C","Data"));
str_map.insert(std::make_pair("B","Data"));
4

2 に答える 2

49

STL マップは注文されていますか?

はい、デフォルトでは、オブジェクトの比較に使用するstd::map<K,V>キー に基づいて a が順序付けられます。Kstd::less<K>

それで、それを反復すると、最初の挿入文字列を最初に反復しますか?

いいえ。要素を挿入した順序ではなく、ソートされた順序に基づいて反復されます。の場合std::string、辞書順(アルファベット順)にソートします。

挿入順序に基づいて反復する場合は、 や などのシーケンス コンテナーを使用することをお勧めしstd::vectorますstd::list

于 2012-06-30T14:45:20.293 に答える
5

std::maps は、指定された型を使用するかoperator<、カスタム比較関数/ファンクター (コンストラクターに引数として指定されている場合) を使用して並べ替えられます。

いいえ、マップを反復処理すると、取得する最初のアイテムは、最初に挿入したアイテムではなく、アルファベット順で最初に来るアイテムになります。

もちろん、「A」は挿入した最初のキーであり、アルファベット順でも最初のキーであるため、違いを生まないサンプルコードの場合。

于 2012-06-30T14:47:55.347 に答える