设置不适用于自定义对象的操作

时间:2015-10-23 16:17:24

标签: c++ set

所以我有一个名为WaterJug的自定义对象,在调用全局set<WaterJug>上的函数时遇到错误:

这是在类定义之前定义的:

set<WaterJug> memo;

在我班上的一种方法中:

for(std::vector<WaterJug>::iterator newJug = newJugs.begin(); newJug != newJugs.end(); ++newJug) {
    const bool is_in = memo.find(newJug); //error here
    if (is_in) {

    }
}

错误是:No matching member function for call to 'find'

我是否必须在自定义类中实现任何接口才能使设置操作正常工作?

3 个答案:

答案 0 :(得分:1)

你有几个错误。

  1. 错误的参数传递给memo.find

    memo.find(newJug) // tpe of newJug is an iterator, not an object.
    

    需要

    memo.find(*newJug)
    
  2. memo.find()的返回值不是bool。它是一个迭代器。而不是

    const bool is_in = memo.find(newJug); //error here
    if (is_in) {
    

    使用:

    if ( memo.find(*newJug) != memo.end() )
    

答案 1 :(得分:0)

std::set::find接受一个对象,newJug是一个迭代器,而不是一个对象,来访问对象&#34;指向&#34;通过迭代器,您需要取消引用newJug*newJug

此外,find返回一个迭代器,而不是bool,它返回找不到对象os的end()迭代器。

此版本的代码可以使用:

for(std::vector<WaterJug>::iterator newJug = newJugs.begin(); newJug != newJugs.end(); ++newJug) {
    const bool is_in = ( memo.find(*newJug) != memo.end() );
    if ( is_in ) {

    }
}

答案 2 :(得分:0)

std::set::find仅获取该集合的Folder1 File1-test File2-test Folder2 File3-test File4-test 类型的参数。当您使用key时,您使用memo.find(newJug)而不是find的迭代器调用key。您可以取消引用迭代器以获取键值key

memo.find(*newJug);返回迭代器时,您还试图将find的返回值存储为bool,这也是一个问题。如果您想知道find是否找到了某些内容,那么您可以重写

find

const bool is_in = memo.find(newJug);