【问题标题】:Using the find() function with sets将 find() 函数与集合一起使用
【发布时间】:2014-03-13 02:54:12
【问题描述】:

我刚刚在我的书中遇到了这一章,我不太明白 find() 是如何工作的。我试图创建一个简单的函数来检查 find() 函数的工作原理,但我的代码中出现了大量错误。

#include <iostream>
#include <set>

using namespace std;

int main()
{

set<int> setA(1,2);


int item;
cout << "Enter a number: ";
cin >> item;

int setIter;
setIter = setA.find(item);
if (setIter != setA.end())
{
  cout << "It's in the list." << endl;
}

return 0;
}

【问题讨论】:

  • 你不能用 setA(1,2) 来初始化一个集合接受两个参数的构造函数接受一个比较器和一个分配器。试试set&lt;int&gt; setA = {1,2}; - 如果您没有使用新的 C++ 编译器,这可能也不起作用,如果没有,您需要调用 insert()

标签: c++ iterator find set


【解决方案1】:

这是您程序的正确实现...

#include <iostream>
#include <set>

using namespace std;

int main()
{
    set<int> setA;
    setA.insert(1);                 // use insert function
    setA.insert(2);
    set<int>::iterator setIter;    // take set iterator

    int item;
    cout << "Enter a number: ";
    cin >> item;

    setIter = setA.find(item);
    if (setIter != setA.end())
    {
      cout << "It's in the list." << endl;
    }

    return 0;
}

您在程序中犯了两个错误。首先,您使用不起作用的构造函数初始化集合,因此您必须使用集合的插入函数。其次,您将迭代器视为不正确的 int。迭代器基本上是一个集合类型的指针。所以你要取set的迭代器

【讨论】:

    【解决方案2】:

    您的代码有两个问题 - 首先是构造函数的使用,另一个是将 set.find() 返回的集合迭代器分配给 int。这是更正后的代码:

    #include <iostream> 
    #include <set> 
    
    using namespace std; 
    
    int main() 
    { 
        set<int> setA({1,2});
    
        int item;
        cout << "Enter a number: ";
        cin >> item;
    
        set<int>::iterator setIter = setA.find(item);
    
        if (setIter != setA.end())
        {
          cout << "It's in the list." << endl;
        }
    
        return 0;
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-08
      • 2017-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-20
      • 2019-03-17
      • 1970-01-01
      相关资源
      最近更新 更多