基本上我有一个代表花的类,它有一些字段 - 名字,开花(字符串),家庭和高度。
我需要实现一个函数来搜索符合条件的所有元素,这是一个特定的姓氏。 我得出的结论是,由于可能存在重复,多套将是合适的。
到目前为止,这是我的代码:
searchByFam(string fam,multiset<CFLowers> mySet){
multiset<CFLowers>::iterator it;
for (it = mySet.begin(); it != mySet.end(); ++it){
mySet.find(fam);
}
}
它的问题是点被加下划线并且鼠标悬停我得到以下错误:没有重载函数的实例与参数类型列表匹配。 有人能告诉我这是什么问题,并指出我正确的方向。 谢谢
答案 0 :(得分:0)
我得出的结论是,多套装是合适的 可能的重复。
真的?花类肯定会有重复的family
和height
值,但这个名称是不是唯一的?花的“名称”很可能是“关键”。
如果你确实需要在常量时间进行查找和插入,那么关联容器可能是你最好的选择,但是“多”(集合,地图等)的任何变体都是完全没必要的。只需要确保定义自己的比较函数进行排序。
现在您的代码存在的问题是您没有为多集合定义比较运算符,这对于使用用户定义类的任何关联容器都是必不可少的。
除了您没有定义比较运算符之外,这里存在一个主要错误:
for (it = mySet.begin(); it != mySet.end(); ++it){
mySet.find(fam);
}
您正在find
上调用multiset
,它将迭代器返回到第一个元素(或结束迭代器)的位置。在这里,您实际上从未使用声明的multiset
迭代器,因此您只是试图一遍又一遍地找到键的第一个出现。你要找的是std::multiset::equal_range
,它返回两个迭代器,表示键指定的元素范围。