質問内容
std::vector をソートしたのですが不可解な挙動に遭遇しております。
vectorをソートした直後は想定通りにソートされているのですが、別の箇所から同じvectorにアクセスするとソートされていません。
func1()でvector内のMyStructのvalueの値で昇順にソートします。
func2()で確認するとソートされていませんん。
c++
1struct MyStruct { 2 int value; 3} 4 5std::map<string, std::vector<MyStruct>> mp; 6 7void func1(){ 8 for (auto m: mp) { 9 10 // vectorの内容をMyStructのvalueで昇順にソート 11 std::sort( 12 mp.second.begin(), 13 mp.second.end(), 14 [](const MyStruct &x, const MyStruct &y) { return x->value > y->value; }); 15 16 // vectorの並びを表示: 想定通りソートされている 17 for (MyStruct &s : mp.second) { 18 Logger::writeLog("MyStruct value=%d", s->value); 19 } 20 } 21} 22 23void func2(string &key){ 24 auto &m = mp[key]; 25 for (MyStruct &s : m) { 26 // vectorの並びを表示: ソートする前の順序に戻っている 27 Logger::writeLog("MyStruct value=%d", s->value); 28 } 29}
std::sortが破壊的ではないのかと思ったのですが、それだとどちらとも失敗するはずですし・・・。
iteratorをend()のまま再利用しているわけでもないですし。(それだと結果が何も表示されないですが。)
どこに誤りがあるのでしょうか?
どうぞ宜しくお願いいたします。