[解決済み] std::mapの反復処理の順番は既知(規格で保証されている)ですか?
質問
つまり、私たちが知っているのは
std::map
の要素はキーにしたがってソートされます。そこで、キーが整数であるとします。もし私が
std::map::begin()
から
std::map::end()
を使用しています。
for
この規格では、キーを持つ要素を昇順に並べ、結果的に反復することを保証しているのでしょうか?
例
std::map<int, int> map_;
map_[1] = 2;
map_[2] = 3;
map_[3] = 4;
for( std::map<int, int>::iterator iter = map_.begin();
iter != map_.end();
++iter )
{
std::cout << iter->second;
}
これは印刷が保証されていますか?
234
それとも実装で決まっているのでしょうか?
現実的な理由:私は
std::map
と
int
キーになります。非常に稀なケースですが、キーが具体的な
int
の値を指定します。そう、それは次のように聞こえます。
std::vector
が良いのでしょうが、私の "very rare situations" に注目してください。
EDIT
: 私は
std::map
はソートされています。(ここの回答のほとんどは)それを指摘する必要はありません。私は私の質問にさえそれを書きました。
コンテナで反復処理するときのイテレータと順番について質問したのです。回答してくれた@Kerrek SBに感謝します。
どのように解決するのですか?
はい、保証します。しかも
*begin()
は、最小のものを与え
*rbegin()
比較演算子によって決定される最大の要素と、2つのキー値
a
と
b
という表現に対して
!compare(a,b) && !compare(b,a)
が真であれば、等しいとみなされます。デフォルトの比較関数は
std::less<K>
.
順序は、2つのキーが同じであることを判定し(上記のルールによる)、効率的な検索(基本的には要素数の対数的な複雑さを持つ二項検索)を実行するために使用されるため、幸運なボーナス機能ではなく、むしろデータ構造の基本的側面である。
関連
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み] std::map でキーが std::string である場合のソート処理
-
[解決済み] ConcurrentHashMapとCollections.synchronizedMap(Map)の違いは何ですか?
-
[解決済み] Mapを実装し、挿入順序を保持するJavaクラス?
-
[解決済み] STL」と「C++ Standard Library」の違いは?
-
[解決済み] マップの全キーに対する反復処理
-
[解決済み】std::mapからすべてのキー(または値)を取得し、それらをベクトルに入れるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】C++でユーザー入力を待つ【重複あり
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] std::mapの順序を確認する方法は?