我知道,如果我在std::map
中插入一个值,我可以通过检查插入返回值来获取一个引用插入元素(或之前存在的元素)的迭代器:
std::map<int, char> m;
auto ret = m.insert(std::make_pair(1, 'A'));
if (ret.second)
std::cout << "it worked" << std::endl;
// ... now iterations over the map starting at ret.first
然而,我想知道之后操纵获得的迭代器是否合法,例如在发生故障时分配所需的值。
std::map<int, char> m;
auto ret = m.insert(std::make_pair(1, 'A'));
if (!ret.second)
ret.first->second = 'A'; // assign the value in case it went wrong
我注意到这似乎有效,但我不确定这是否是所需的行为,因为我在插入失败的情况下找到的所有内容都是使用operator[]
。但是这对我来说不是一个解决方案,因为我之后需要insert
返回的迭代器,由于性能原因我无法使用insert
和operator[]
。
长话短说: 操纵从std::map
s insert()
返回的迭代器引用的数据是否有效?
答案 0 :(得分:3)
长话短说: 是否有效操纵从
std::map
sinsert()
返回的迭代器引用的数据?
是的,这很好。您无法修改密钥,因为它是const
,但您可以根据需要修改密钥映射到的值。