【问题标题】:Adding pair in set在集合中添加对
【发布时间】: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&lt;int, std::string&gt;std::unordered_map&lt;int, string&gt; - 会让retrieve 函数快得多
  • @MartinBonner 是的,可以使用地图,但出于好奇,我试图在集合中使用对来实现,以了解它们是如何工作的,但我在尝试解决它们时遇到了一些问题。
  • 感谢帮助我解决了错误,您希望对表示对的集合,您需要使您的对成为一个容器。所以,我需要先将它的大小声明为对 p[100];

标签: c++ set std-pair


【解决方案1】:

pairspair&lt;int, string&gt; 的类型别名。 std::pair does not have an operator[] overload

假设您希望 pairs 表示对的集合,您需要将您的 pairs 设为容器(例如 vectorarray

正如评论中提到的Martin Bonnerstore 中的符号s 指的是string s 参数。更改它以避免与set s 的标识符冲突。

typedef pair<int, string> pairs[100];
pairs p;

void store(int num, string str) 
{    
    p[i].first=num;  
    p[i].second=str;
    s.insert(p[i]);
    i++;   
}

【讨论】:

  • 这仍然行不通,因为对s.insert 的调用将尝试调用store 的第二个参数的insert 函数,而不是全局对集合。
  • 好收获。改进答案。
  • 另外,将这些对存储在集合的外部并没有什么实际意义 - 只需写 void store( int num, std::string str) { s.insert({num,str}); }
  • @MartinBonner:是的,整个程序的架构很差。但我认为这超出了问题的范围。
  • @PrashantShubham:然后仔细阅读您的错误并使用互联网和您的学习资源尝试解决它。如果您仍有问题,请在此处发布错误或在适当的情况下在新问题上发布。
猜你喜欢
  • 1970-01-01
  • 2016-02-23
  • 2014-12-09
  • 1970-01-01
  • 2015-04-29
  • 2022-12-18
  • 2018-11-19
  • 2014-07-29
相关资源
最近更新 更多