c++ STL映射-条件插入
C++ STL map - conditional insert
我正在寻找一种有效的方法来做条件插入。理想情况下,我想要一个模板函数,将工作在任何地图。我想要这样写:
std::map<int, std::string> MyMap;
if(MyMap.ConditionalInsert(3, "Hello"))
{ // there was no element 3, one has been added with value "Hello"
}
else
{ // there was already an element 3 in the map, it's unchanged
}
我不能轻易地使用operator[]
,因为没有简单的方法来判断它是否创建了一个元素。我可以使用count
进行测试,但是如果我们进行插入,我必须搜索映射两次。我想find
的东西最好,但它似乎总是出来疣和尴尬。
有真正好的方法来做到这一点吗?
你觉得这有什么问题:
auto ret = MyMap.insert(std::make_pair(3, "Hello"));
if( ret.second)
{
//the value is inserted
}
else
{
//no value is inserted
}
返回值指示该值是否已经存在。如果不存在,则插入值,否则不插入值。
摘自:
…返回一个pair,其成员pair::first设置为一个迭代器,该迭代器指向新插入的元素或在映射中已经具有相同值的元素。如果插入了新元素,则pair::中的第二个元素设为true;如果存在具有相同值的元素,则设为false。
不覆盖之前的值,用什么?
std::map<T1,T2>::insert
已经为您做了这个检查,如果已经有一个带有指定键的条目,则插入将被中止。
std::map<int, std::string> m;
m.insert (std::make_pair (3, "hello world"));
m.insert (std::make_pair (3, "world hello"));
std::cerr << m[3] << std::endl;
输出: hello world
是否插入了新值?
std::map<T1,T2>::insert
返回一个std::pair<std::map<T1,T2>::iterator, bool>
,第二个值(pair.second
)将作为一个标志,表明键/值对是否被插入。
if ret.second == true: value was inserted
if ret.second == false: the key has already been set
示例代码片段:
std::cerr << m.insert (std::make_pair (1,1)).second << std::endl;
std::cerr << m.insert (std::make_pair (1,2)).second << std::endl;
输出 1
0
insert
函数已经做了你想要的。
std::pair<std::map<int, std::string>::iterator, bool>
insertionResult = MyMap.insert(std::make_pair(3, "Hello"));
if(insertionResult.second)
{ // there was no element 3, one has been added with value "Hello"
}
else
{ // there was already an element 3 in the map, it's unchanged
}
第一个元素给出了包含键的元素的位置,无论它是旧的还是新的
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 预处理器:插入结构名称中的前一个行号
- 在没有太多条件句的情况下,我如何避免被零除
- 基于多个条件处理地图中的所有元素
- 条件constexpr函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- 无论条件是否为true,if总是在c++中执行
- 如何在c++中只将键插入到bimap的一侧
- 我可以使用条件运算符初始化C风格的字符串文字吗
- 基于模板值的条件变量
- 使用条件迭代器插入到向量中
- 我可以在一行代码中将向量中与条件匹配的所有元素插入到集合中吗?
- 在一个映射向量上迭代,如果满足条件,则插入一个副本
- 插入最有效的数据结构,然后使用不同的条件进行排序
- 是否有 std 或提升容器可以避免其插入和查找方法之间的争用条件
- c++ STL映射-条件插入
- 在条件C++循环语句中向SQLite3表中插入条目
- 是否有更优雅的方法来有条件地插入到std::map的std::map中