gpt4 book ai didi

c++ - 将对象添加到 map 内的 vector 中

转载 作者:行者123 更新时间:2023-12-02 09:54:49 25 4
gpt4 key购买 nike

class Obj {
private:
const string & m_String;
public:
Obj ( const string & x )
: m_String ( x ) {}
... // getters, overloaded operators etc
};

int main ( void ) {
// new map
map<string, vector<Obj>> myMap;
myMap . insert ( pair<string, vector<Obj>> ("1st", vector<Obj>() ) );

Obj a1 ("a"), a2 ("b");

// add three elements into "1st"
myMap["1st"] . push_back (a1);
myMap["1st"] . push_back (a2);
myMap["1st"] . push_back (a2);

// display contents of all vecs inside map
for ( map<string, vector<Obj>>::const_iterator it1 = myMap . begin(); it1 != myMap . end(); ++it1 ) {
cout << it1 -> first << ":"<< endl;
for ( vector<Obj>::const_iterator it2 = it1->second . begin(); it2 != it1->second . end(); ++it2) {
cout << *it2;
if ( it2 != prev(it1->second . end()) ) cout << ", ";
else cout << endl;
}
}
return 0;
}

我正在尝试将一些对象推回到 map 内的 vector 中。代码编译时没有警告
但输出是
1st:
a, 1st, 1st

而不是所需的输出
1st:
a, b, b

无法弄清为什么的合法原因。该 vector 可以与int,string等一起正常工作,并且应该与对象一起工作,但是由于某些原因,它不能工作。尝试使用对象的指针也无济于事。
问候

最佳答案

您的错误是使用对Obj对象中的字符串的引用。

您的代码使用临时字符串构建Obj,然后存储对其的引用。那是未定义的行为,无论您的引用最终指向什么,都可以是任何东西。

关于c++ - 将对象添加到 map 内的 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61125136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com