2016-04-30 84 views
-2

我有以下容器:插入数据::地图

map<int,string,string> data; 

我一直在尝试存储使用以下代码(一次一个),地图资料,但他们没有工作。

data.insert(m, f, l); 
data.insert(map<int,string,string>(m, f, l)); 
data.insert(pair<int,string,string>(m, f, l)); 

任何人有任何想法如何将数据存储在std :: map?

谢谢

+0

为什么downvote? – zeeks

+0

'map data;'不是件事。 'std :: string'不能用作比较函子类型。请阅读[参考文档](http://en.cppreference.com/w/cpp/container/map)。 –

+0

'std :: map '无效,您只能指定一个键类型和一个值类型。 – songyuanyao

回答

1

你可以写

map<int, std::pair<string, string> > data; 

创建地图(std::map),其关键是一个int和数据是二string秒。

要插入数据,你可以写

data.insert(std::make_pair<int, std::pair<string, string> >(m, std::make_pair<string, string>(f, l)); 

或者更简单地说

data[m] = std::make_pair<string, string>(f, l); 

完整的示例:

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

using std::map; 
using std::string; 

int main(void) { 
    map<int, std::pair<string, string> > data; 
    int m; 
    string f, l; 

    // insert data 
    m = 20; f = "hoge"; l = "fuga"; 
    data.insert(std::pair<int, std::pair<string, string> >(m, std::pair<string, string>(f, l))); 
    m = 10; f = "foo"; l = "bar"; 
    data[m] = std::pair<string, string>(f, l); 

    // display data 
    for (map<int, std::pair<string, string> >::iterator it = data.begin(); it != data.end(); it++) { 
     std::cout << it->first << " -> " << it->second.first << ", " << it->second.second << '\n'; 
    } 

    return 0; 
}