我有这个代码,我想要实现的是我想在c
上实际执行增量当且仅当我实际插入地图时,我研究了map的operator [],但没有得到它按我的意愿工作。有什么简单的方法可以做到吗?或者我必须在插入每个选项之前搜索密钥,如果我什么也没找到,那么只需增加并插入
#include <iostream>
#include <map>
#include <string>
int main ()
{
std::map<std::string,int> mymap;
int cnt = 0;
int h = -1;
mymap.insert(std::pair<std::string, int>("GBP", cnt++));
mymap.insert(std::pair<std::string, int>("EUR", cnt++));
mymap.insert(std::pair<std::string, int>("USD", cnt++));
mymap.insert(std::pair<std::string, int>("GBP", cnt++));
mymap.insert(std::pair<std::string, int>("GBP", cnt++));
mymap.insert(std::pair<std::string, int>("GBP", cnt++));
mymap.insert(std::pair<std::string, int>("CAD", cnt++));
mymap.insert(std::pair<std::string, int>("GBP", cnt++));
std::cout << cnt << std::endl;
for(const auto & v : mymap)
std::cout << v.first << " " << v.second << std::endl;
return 0;
}
结果将是gbp 0,eur 1,usd 2,cad 4(不是cad 6)
答案 0 :(得分:2)
insert
返回pair
,其first
是已插入元素的迭代器(此处不感兴趣)且其second
为bool
告诉你元素是否实际添加。
所以,你可以检查:
if(mymap.insert(std::pair<std::string, int>("GBP", cnt)).second)
cnt++;
if(mymap.insert(std::pair<std::string, int>("EUR", cnt)).second)
cnt++;
// and so on.
但在这种特殊情况下,您可以使用mymap.size()
作为计数:
mymap.insert(std::pair<std::string, int>("GBP", mymap.size()));
mymap.insert(std::pair<std::string, int>("EUR", mymap.size()));
// and so on.
因为无论何时插入元素,地图的大小都会增加1。