-2

我正在尝试从具有两个以上元素的 std::map 中访问特定元素。这是一个例子:

std::map <int, CString, CString, CString> map;

//Initialise

map[0] = _T("stuff1"), _T("stuff2"), _T("stuff3");

//now if I just want to access stuff3 is it this:

CString str = map[0][2];

//or something more like this?

CString str = map[0]. ???

任何帮助都会非常感谢。

编辑:谢谢抱歉,第一次使用地图,我想知道为什么我找不到关于 std::map 的任何信息,里面有更多元素。

4

3 回答 3

5

你试过编译这个吗?它不应该。您只能为每个元素创建一个只有 1 个键和 1 个值的映射。

但是值可以是复合的,所以你可以写

struct ValueType {
 CString v1;
 CString v2;
 CString v3;
}
std::map <int, ValueType> map;

并访问元素,如map[somekey].v3;

要在这样的地图中插入一个值,您必须编写

ValueType strings = {"1","2","3"};
map.insert(999, strings);

或者您可以创建一个辅助函数(即void addToMap(std::map <int, ValueType> &map, CSting const& v1, CString const& v2, CString const& v3)),它会以更方便的方式填充您的地图。

于 2012-08-24T10:27:49.863 回答
3

std::map <int, CString, CString, CString> map;是非法的。

使用 astd::multimap或 a std::map<int,std::vector<CString> >

于 2012-08-24T10:27:55.490 回答
1

我相信这是您正在寻找的

std::map <int, std::list<CString> > myMap;

然后您将访问myMap[0],然后访问返回的每个元素std::list<CString>

于 2012-08-24T10:27:48.583 回答