gpt4 book ai didi

c++ - unordered_map of iterators - 如何检查未初始化的元素

转载 作者:行者123 更新时间:2023-11-30 02:58:20 25 4
gpt4 key购买 nike

我有一个 unordered_map<string, list<SomeClass>::iterator>

我想在此 map 中插入一个元素,但前提是该元素不存在。如果它存在,我不想覆盖现有的项目。另外,我想避免进行两次查找以检查该项目是否存在然后进行插入。我得出的结论是,我应该使用 operator[] 来获取带有键的元素,检查它是否有效,如果无效,则对其进行初始化。问题是该元素是一个迭代器,我必须检查它是否已初始化,这实际上是不可能的。我可以使用派生自列表迭代器类的类,并实现 defautl 构造函数以将其初始化为“无效”值,但在构造函数中我无权访问列表实例以获取其 end() 迭代器。有什么想法吗?

最佳答案

使用insertemplace,如果值已经存在则不会覆盖:

auto i = m.insert(std::make_pair("hello"), my_iterator);
auto j = m.emplace("hello", my_iterator); // same

可以测试i.second是否插入成功,i.first是map元素的迭代器。

关于c++ - unordered_map of iterators - 如何检查未初始化的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13720532/

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