在向量中匹配元素

时间:2012-11-05 02:26:00

标签: c++

我想要做的是匹配允许用户输入例如ID并将该ID与某个向量匹配并打印它。这是我班级的样子。 (我正在尝试进行库存计划)。

class Item{
private:
  string month;
  string name;
  int ID;
  int actual_qunatity;

public:
  void print()const;
  void report();
  void getdata();
  void setname (string itemname){name=itemname;}
  void setID(int setID){ID=setID;}
};
class Inventory{
public:
  void print2()const;
  void report();
  void getdata();
  void sale();
private:
      vector<Item>items;
};

在向量中添加元素后,我想在向量中找到一些元素并将其打印出来。这是

void Inventory::sale(){                                                                                                                                                               
  int ID;
  cout<<"Enter ID ";
  cin>>ID;
  vector<Item>::const_iterator it;
  it=find(items.begin(), items.end(), ID);
  ++it;
}

但是我得到一个错误:没有匹配函数来调用'find(std :: vector :: iterator,std :: vector :: iterator,int&amp;)'

3 个答案:

答案 0 :(得分:3)

使用std::find_if和lambda来执行搜索。

int ID;
cout << "Enter ID ";
cin >> ID;
auto it = find_if(items.begin(), items.end(), [&]( Item const& item ) {
                   return item.getID() == ID; // need to be able to access ID 
                                            // publicly
                  } );

if( it != items.end() ) {
  // it points to item with matching ID
}

答案 1 :(得分:2)

是的,这是因为你有一个Item个对象的向量,你告诉它要查找一个整数。您需要更改设计或仅使用for循环并手动对每个对象进行检查,如下所示:

std::vector<Item>::const_iterator it;
for(it = items.begin(); it != items.end(); it++) {
    if (it->ID == ID) {
        // this is your element
    }
}

答案 2 :(得分:2)

要查找vector<T>内的特定项目,您不能让代码猜测您要检查ID字段。首先,您需要编写自定义比较运算符:

bool operator== ( const Item &n1, const Item &n2) {
  return n1.ID == n2.ID;
}

然后你应该使用一个虚拟项目(及其构造函数)来搜索指定的项目:

std::find(items.begin(), items.end(), Item(ID));

您还可以迭代向量并查找指定的ID。或者更好的是,如果您不需要随机访问该向量,请使用map<int, Item>unordered_map