地图中的一种自动增量

时间:2016-04-06 00:05:21

标签: c++ stl

我有这个代码,我想要实现的是我想在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)

1 个答案:

答案 0 :(得分:2)

insert返回pair,其first是已插入元素的迭代器(此处不感兴趣)且其secondbool告诉你元素是否实际添加。

所以,你可以检查:

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。