如何使用迭代器初始化地图的关键字段?

时间:2018-05-06 07:26:40

标签: c++ string maps

#include <iostream>
#include <map>
#include <string>

int main ()
{
    std::string s;
    std::cout<<" String : ";
    std::getline(std::cin,s);
    std::map<std::string,std::string> mapa;
    std::map<std::string,std::string>::iterator it(mapa.begin());
    it->first = s;
    it->second = s;
    std::cout << it->second << std::endl;
    return 0;
}

为什么我不能初始化地图的关键字段(it-&gt; first = s不起作用),但第二个字段确实有效?什么是解决方案?

1 个答案:

答案 0 :(得分:0)

  

为什么我不能初始化地图的关键字段(it-&gt; first = s不能   工作)但第二个领域确实有效吗?什么是解决方案?

你的问题本身就有答案。 std::map将键映射到值。这意味着,在创建时,您需要设置(键和值)。

it->first=s;这不会编译,因为你还没有提到,关键是什么。

it->second=s;这是一个UB。因为你还没有提到钥匙。

  

std :: map是一个包含键值的有序关联容器   配有唯一键。使用比较对键进行排序   功能比较。

因此,为了进行比较并在数据结构中放置正确的位置,它需要两个信息在一起。

解决方案是:

  • mapa[key] = value;使用(operator[])。您可以使用相同的键直接通过相应的键访问地图中的值。
  • mapa.emplace("key", "value");
  • mapa.insert ( std::pair<std::string, std::string>("key", "value") );
  • mapa.insert ( std::make_pair("key", "value") );
  • std::map<std::string,std::string>::iterator it(mapa.begin());
    mapa.insert (it, std::pair<std::string, std::string>("key", "value"));