C2676:二进制'<':'const _Ty'没有定义这个运算符或转换为预定义运算符可接受的类型。

问题描述 投票:0回答:1

下面的代码我一直收到这个错误。

在阅读 这个我相信我的错误是 it++ 中,我试着将其替换为 next(it, 1) 但它并没有解决我的问题。

我的问题是,是不是迭代器在这里给我带来了问题?

#include <iostream>
#include <vector>
#include <stack>
#include <set>
using namespace std;

struct Node
{
    char vertex;
    set<char> adjacent;
};


class Graph
{
public:
    Graph() {};
    ~Graph() {};

    void addEdge(char a, char b)
    {
        Node newV;
        set<char> temp;
        set<Node>::iterator n;

        if (inGraph(a) && !inGraph(b)) {
            for (it = nodes.begin(); it != nodes.end(); it++)
            {
                if (it->vertex == a)
                {
                    temp = it->adjacent;
                    temp.insert(b);
                    newV.vertex = b;
                    nodes.insert(newV);
                    n = nodes.find(newV);
                    temp = n->adjacent;
                    temp.insert(a);
                }
            }
        }
    };

    bool inGraph(char a) { return false; };
    bool existingEdge(char a, char b) { return false; };

private:
    set<Node> nodes;
    set<Node>::iterator it;
    set<char>::iterator it2;
};

int main()
{
    return 0;
}
c++ pointers graph iterator set
1个回答
2
投票

这里是迭代器给我带来的问题吗?

不是,而是缺乏自定义的比较器,用于比较 std::set<Node> 导致的问题。意思是说,编译器必须知道,如何对这个问题进行排序。std::setNode s. 通过提供适当的 operator<,你可以解决它。你看 演示

struct Node {
   char vertex;
   set<char> adjacent;

   bool operator<(const Node& rhs) const noexcept
   {
      // logic here
      return this->vertex < rhs.vertex; // for example
   }
};

或提供 自定义比较向量

struct Compare final
{
   bool operator()(const Node& lhs, const Node& rhs) const noexcept
   {
      return lhs.vertex < rhs.vertex; // comparision logic
   }
};
// convenience type
using MyNodeSet = std::set<Node, Compare>;

// types
MyNodeSet nodes;
MyNodeSet::iterator it;
© www.soinside.com 2019 - 2024. All rights reserved.