插入到std :: map并将获得的迭代器操作到插入的元素

时间:2017-08-11 11:36:42

标签: c++ c++11 iterator

我知道,如果我在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返回的迭代器,由于性能原因我无法使用insertoperator[]

长话短说: 操纵从std::map s insert()返回的迭代器引用的数据是否有效?

1 个答案:

答案 0 :(得分:3)

  

长话短说: 是否有效操纵从std::map s insert()返回的迭代器引用的数据?

是的,这很好。您无法修改密钥,因为它是const,但您可以根据需要修改密钥映射到的值。

相关问题