0

我想要做的是匹配允许用户输入例如 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&)'

4

3 回答 3

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
}
于 2012-11-05T02:40:17.250 回答
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
    }
}
于 2012-11-05T02:30:50.200 回答
2

要在 a 中查找特定项目,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。或者更好的是,如果您不需要随机访问向量,请使用 amap<int, Item>或 an 。unordered_map

于 2012-11-05T02:31:00.097 回答