使用带有Struct的STL容器

时间:2018-01-31 17:21:13

标签: c++ struct stl iterator

我想存储此结构所代表的链表中每个项目的地址:

struct Node
   {
       int data;
       Node* next;
   };

我为此做了一个无序的设置:

unordered_set<Node*> h;

我将迭代器定义为

unordered_set <Node*>::iterator got = h.find (&headB);

这自然会引发很多编译错误。在论坛上阅读,我意识到这是错误的,因为Node不是标准数据类型,这个迭代器无法工作。阅读更多,我还看到了我还需要为此实现定义运算符的地方。我在Stack Overflow上搜索了很多,但没有找到任何回答这个问题的东西。

基本上,我只是想知道如何使struct与任何STL容器和迭代器一起工作:我们如何定义容器和实现算法(插入,搜索,删除它们)

1 个答案:

答案 0 :(得分:0)

您正在插入和查找错误。 您的元素属于Node*类型。

在您的元素之前,您有一个“地址”运算符(&)。这意味着您正在尝试添加Node**,这是不正确的类型。 所以编译器说:

prog.cpp:67:24: error: no matching function for call to ‘std::unordered_set<Node*>::insert(Node**)’

正确的方法是通过删除运算符的地址(Node*)来添加正确类型的元素&;

除非您想要指针的地址,否则您需要容器来存储Node**