【发布时间】:2016-09-06 21:15:02
【问题描述】:
我正在尝试在我的集合中插入一对 int 和 string。我想要做的是使用集合实现哈希映射,我使用存储函数存储数字及其对应的字符串,然后使用检索检索字符串。请提出问题所在,有什么方法可以更有效地完成。错误在于存储功能。我没有写 main 函数,因为它只是接受输入和调用函数。
typedef pair<int, string> pairs;
pairs p;
set<pairs> s;
set<pairs>::iterator it;
int i=0;
void store(int num,string s)
{
p[i].first=num; //error is while I am using the pair to store the string
p[i].second=s;
s.insert(p[i]);
i++;
}
string retrieve(int num)
{
for(it=s.begin();it!=s.end();++it)
{
pairs m = *it;
if(m.first==num)
{
return m.second;
}
}
}
我的错误:
error: no match for ‘operator[]’ (operand types are ‘pairs {aka std::pair<int, std::basic_string<char> >}’ and ‘int’)
p[i].first=num;
【问题讨论】:
-
std::pair没有索引operator[]。错误消息实际上有什么不清楚的地方? -
另外,为什么不直接使用
std::map<int, std::string>或std::unordered_map<int, string>- 会让retrieve函数快得多! -
@MartinBonner 是的,可以使用地图,但出于好奇,我试图在集合中使用对来实现,以了解它们是如何工作的,但我在尝试解决它们时遇到了一些问题。
-
感谢帮助我解决了错误,您希望对表示对的集合,您需要使您的对成为一个容器。所以,我需要先将它的大小声明为对 p[100];