STL中一个容器的元素中包含另一个容器的问题

发布于 2022-10-15 08:19:15 字数 2557 浏览 23 评论 0

本帖最后由 lclqqq 于 2011-04-28 14:53 编辑

STL中一个容器的元素中包含另一个容器的问题
想实现类似下面的一个结构。

  1. #include <iostream.h>
  2. #include <list>
  3. #include <ext/hash_set>
  4. using namespace __gnu_cxx;
  5. using namespace std;
  6. #define HTMAX 10003
  7. typedef struct{
  8. char Name[24];
  9. list<int> mylist;
  10. }info_t;
  11. class info_caculate
  12. {
  13. public:
  14.    int operator()(const info_t& info) const
  15.    {
  16.     int h=0;
  17.     int i;
  18.       for(i=0;info.Name[i];i++)
  19.         h = (h*211 + (info.Name[i] -32) + 7)%103;
  20.       h = abs(h);
  21.       return h;
  22.               
  23.    }
  24. };
  25. class info_equal
  26. {
  27. public:
  28.    bool operator()(const info_t& Ainfo, const info_t& Binfo) const
  29.    {
  30.      if(!strcmp(Ainfo.Name, Binfo.Name))
  31.        return true;
  32.      else
  33.        return false;   
  34.    }   
  35. };
  36. int main(int argc, char **argv)
  37. {
  38. info_t info;
  39. hash_set<info_t, info_caculate, info_equal> ht;
  40. hash_set<info_t, info_caculate, info_equal>::iterator si;
  41. list<info_t> infolist;
  42. list<info_t>::iterator li;
  43.    strcpy(info.Name, "info1");
  44.    ht.insert(info);
  45.    si = ht.begin();
  46.    si->mylist.push_back(10);
  47.    
  48.    infolist.push_back(info);
  49.    li = infolist.begin();
  50.    li->mylist.push_back(10);
  51.    return 0;
  52. }

复制代码但在si->mylist.push_back(10);处会报错

main.cc:52: error: passing 'const std::list<int, std::allocator<int> >' as 'this' argument of 'void std::list<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = int, _Alloc = std::allocator<int>]' discards qualifiers

但下面使用的是list就没有问题,那位知道是什么情况?谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜点 2022-10-22 08:19:15

回复 1# lclqqq

    恩,原来hash_set的元素是不能修改的。呵呵,还是用hash_map吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文