c++ - std::find 对象 vector 上出现的错误

标签 c++ vector compiler-errors iteration std

在这个函数中,我想在 vector 队列中搜索“vertex”。

bool PriorityQueue::contains(VertexPriority vertex) const {
     return (std::find(queue.begin(), queue.end(), vertex) != queue.end());
}

vector 队列是这个对象的一个​​实例:

std::vector<VertexPriority> queue;

我的运算符重载是这样的:

bool operator==(const VertexPriority& v){ return (v.vertex == vertex); }

我该如何解决这个错误?

出现的错误是下一个错误,在每个错误的开头都有以下路径:

C:\Dev-Cpp\include\c++\3.4.2\bits\stl_algo.h

In function `_RandomAccessIterator std::find(_RandomAccessIterator, _RandomAccessIterator, const _Tp&, std::random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator > >, _Tp = VertexPriority]':

instantiated from `_InputIterator std::find(_InputIterator, _InputIterator, const _Tp&) [with _InputIterator = __gnu_cxx::__normal_iterator > >, _Tp = VertexPriority]'

passing const VertexPriority' asthis' argument of `bool VertexPriority::operator==(const VertexPriority&)' discards qualifiers

最佳答案

使运算符为常量:

bool operator==(const VertexPriority& v) const 
{ 
    return (v.vertex == vertex); 
}

请注意,这会使成员函数 const 本身,这使编译器能够在 VertexPriority 类型的 const 对象上调用它。

这实际上正是编译器所说的:

passing const VertexPriority' as this' argument of `bool VertexPriority::operator==(const VertexPriority&)' discards qualifiers

const 的VertexPriority 对象作为隐式this参数 传递给成员函数。

关于c++ - std::find 对象 vector 上出现的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19743455/

相关文章:

aes - 这种加密方法安全吗?

c - 访问 vector 中结构的成员

java - 克隆 vector 时无法摆脱 Java 警告

c++ - 对于以下用途,vector 和 deque 之间最有效的是什么?

java - “变量”不能解析为变量

matlab - 麻烦编译uigetfile函数和importdata || Matlab

c++ - "stable_sort()ing"C++ 中的 STL <列表>

c++ - Boost::thread::interrupt() 对于不同的中断点表现不同。为什么?

c++ - 内存管理和重新分配

AngularJS错误: $compile:multidir Multiple Directive Resource Contention