有点像地图中的自动增量

sort of autoincrement in map

本文关键字:地图      更新时间:2023-10-16

我有这段代码,我想实现的是,我想在c上实际执行增量,当且仅当我实际插入到map中时,我研究了map的运算符[],但没有让它按我想要的那样工作。有什么简单的方法吗?或者我必须在插入所有内容之前搜索密钥,如果我什么都找不到,则递增并插入

#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)

insert返回一个pair,其first是插入的元素的迭代器(此处不感兴趣),其CCD-5是bool,该CCD_6"告诉"您该元素是否实际添加。

所以,你可以检查一下:

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。