C ++,给定特定条件,在多集中显示现有对象的列表

时间:2016-05-02 15:13:42

标签: c++

基本上我有一个代表花的类,它有一些字段 - 名字,开花(字符串),家庭和高度。

我需要实现一个函数来搜索符合条件的所有元素,这是一个特定的姓氏。 我得出的结论是,由于可能存在重复,多套将是合适的。

到目前为止,这是我的代码:

searchByFam(string fam,multiset<CFLowers> mySet){
    multiset<CFLowers>::iterator it;

    for (it = mySet.begin(); it != mySet.end(); ++it){
        mySet.find(fam);
    }
}

它的问题是点被加下划线并且鼠标悬停我得到以下错误:没有重载函数的实例与参数类型列表匹配。 有人能告诉我这是什么问题,并指出我正确的方向。 谢谢

1 个答案:

答案 0 :(得分:0)

  

我得出的结论是,多套装是合适的   可能的重复。

真的?花类肯定会有重复的familyheight值,但这个名称是不是唯一的?花的“名称”很可能是“关键”。

如果你确实需要在常量时间进行查找和插入,那么关联容器可能是你最好的选择,但是“多”(集合,地图等)的任何变体都是完全没必要的。只需要确保定义自己的比较函数进行排序。

现在您的代码存在的问题是您没有为多集合定义比较运算符,这对于使用用户定义类的任何关联容器都是必不可少的。

除了您没有定义比较运算符之外,这里存在一个主要错误:

for (it = mySet.begin(); it != mySet.end(); ++it){
        mySet.find(fam);
  }

您正在find上调用multiset,它将迭代器返回到第一个元素(或结束迭代器)的位置。在这里,您实际上从未使用声明的multiset迭代器,因此您只是试图一遍又一遍地找到键的第一个出现。你要找的是std::multiset::equal_range,它返回两个迭代器,表示键指定的元素范围。