如何将一对元素作为单个元素插入到集合容器中?

时间:2013-09-06 11:10:01

标签: c++ dictionary set containers std-pair

我的简单代码是这样的:

#include<iostream>
#include<set>

using namespace std;

void main() {
     set<string,string> myset;
     myset.insert(pair<string,string>("abc","def"));
     cout<<myset.size()<<endl;
}

即。我想把对作为集合元素。但是这段代码会产生错误。在地图容器中,我也很难将不同的对作为元素插入。但是在("abc","def")("abc","ghe")的情况下,对于相同的键值,即“abc”,即使对对于对的第二元素不同,第二对也不能被带入容器中。

如何更改我的代码以完成工作?

1 个答案:

答案 0 :(得分:0)

std::set声明为:

template <class Key, class Compare = less<Key>,
          class Allocator = allocator<Key> >
    class set;

该集包含Key类型的元素,使用第二个模板参数进行排序。因此,您无法定义std::set< std::string, std::string >来保存字符串对。

std::map可用于存储std::string对,但密钥是唯一的。因此,您将无法使用相同的密钥(对的第一个元素)存储多个对。

如果你想存储对,你可以直接这样做,方法是这样定义容器:

std::set< std::pair<std::string, std::string> > mySet;