unordered_map<string, list<SomeClass>::iterator>
我想在此地图中插入一个元素,但前提是它不存在。如果存在,我不想覆盖现有项目。此外,我想避免做两次查找来检查项目是否存在,然后是插入。我得出结论,我应该使用operator []来获取带有键的元素,检查它是否有效,如果没有,则初始化它。问题是元素是一个迭代器,我必须检查它是否被初始化,这是不可能的。我可以使用从列表迭代器类派生的类,并实现defautl构造函数将其初始化为“无效”值,但在构造函数中,我无权访问列表实例以获取其end()迭代器。 任何想法怎么做?
答案 0 :(得分:3)
使用insert
或emplace
,如果该值已经存在,则不会覆盖该值:
auto i = m.insert(std::make_pair("hello"), my_iterator);
auto j = m.emplace("hello", my_iterator); // same
您可以测试i.second
以查看插入是否成功,i.first
是map元素的迭代器。