2016-09-25 46 views
-3

如何在C++中为地图中的特定键创建矢量以及如何访问它们? 假设我在此格式在C++中存储地图中的键的向量,并通过遍历地图访问键的向量

100 6 7 
    56 7 8 
    100 90 8 
    100 8 9 

这里100和在第一柱56是键接受数据和用于钥匙100我需要创建包含元素6 7 90 8 8 9 和用于键56的载体,载体应我们如何在C++中做到这一点,并在同一时间如何访问C++中的某个键的向量? 我试图用这种方法插入矢量键,但无法通过迭代地图来访问键的矢量。

int k; 
cin>>k; 
for(int i=1;i<=k;i++){ 
    int r,c1,c2; 
    cin>>r>>c1>>c2; 
    mymap[r].push_back(c1); 
    mymap[r].push_back(c2); 

} 

怎样才能在C++中使用map?

+0

你确实是知道如何遍历一个['的std :: map'(http://en.cppreference.com/w/cpp/container/map)?你知道迭代器“指向”一个['std :: pair'](http://en.cppreference.com/w/cpp/utility/pair)?你能否详细说明你遇到的问题?如果可能的话,请尝试创建一个[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)并向我们展示。 –

+0

@JoachimPileborg我发现很难访问矢量的关键。你可以写一个代码,如何获取一个键的元素?对于键100,我应该有矢量6 7 90 8 8 9以获得打印 – yellowpanda

+0

您似乎已经知道'mymap [r]'可以访问矢量,因此您可以在其上调用'push_back'。如何尝试'mymap [r] .begin()'和'mymap [r] .end()'? –

回答

0

如果你想使用地图,那么你想要做的就是继续添加到与关键字相关的向量。

下面的示例演示如何做到这一点:

#include <map> 
#include <vector> 
#include <string> 
#include <sstream> 

typedef std::map<int, std::vector<int>> MapV; 

using namespace std; 

int main() 
{ 
    MapV mymap; 
    string line; 

    // get one line of data 
    while (getline(cin, line)) 
    { 
     // use a string stream to parse the data 
     istringstream strm(line); 
     int key, data; 

     // first value is the key 
     strm >> key; 

     // all other values are the data 
     while (strm >> data) 
     { 
      // the magic is here. 
      auto pr = mv.insert(make_pair(key, std::vector<int>())); 

      // add item to the vector 
      pr.first->second.push_back(data); 
     } 
    } 
} 

代码的最重要的部分是这一行:

auto pr = mv.insert(make_pair(key, std::vector<int>())); 

std::map::insert函数会返回一个std::pair,表示该迭代器插入的项目作为对的first,或者如果密钥存在,则将现有迭代器添加到已存在的密钥中。

然后,我们需要做的就是获取该返回值,访问该向量上的second(它是向量),并且仅访问push_back

看到这个live example