C++ C++;多集计数()

C++ C++;多集计数(),c++,count,insert,equals,multiset,C++,Count,Insert,Equals,Multiset,所以问题是,我有一个multiset,其中我使用std::equal_to操作符来比较元素,但是当我使用count()方法时,它说multiset中的所有4个元素都等于我的counts参数 std::multiset< std::string, std::equal_to< std::string > > mset; mset.insert("C++"); mset.insert("SQL"); mset.insert("Jav"); mset.insert("C");

所以问题是,我有一个multiset,其中我使用std::equal_to操作符来比较元素,但是当我使用count()方法时,它说multiset中的所有4个元素都等于我的counts参数

std::multiset< std::string, std::equal_to< std::string > > mset;
mset.insert("C++");
mset.insert("SQL");
mset.insert("Jav");
mset.insert("C");

for(std::multiset<std::string>::iterator it = mset.begin(); it != mset.end(); ++it){
std::cout << *it << std::endl;
}

std::cout << std::endl;
std::cout << mset.count("STR");
std::multiset>mset;
mset.插入(“C++”);
mset.插入(“SQL”);
mset.插入(“Jav”);
mset.插入(“C”);
对于(std::multiset::iterator it=mset.begin();it!=mset.end();++it){

std::cout正如BobTFish在评论中所说的那样,
Compare
类型应该返回
true
,如果第一个参数是“小于”(必须在第二个参数之前排序)。默认类型是。

对于存储在
std::multiset
中的元素,必须定义
f(x,y)
。严格弱序的一个属性是不可伸缩性,即
f(x,x)
必须是
false
。在严格弱序中违反了此属性,并且得到了一些未定义的结果


您可能希望使用的是
std::unordered_multiset

C++
set
multiset
(和
map
multimap
)不要使用谓词检查两个元素是否相等,它们会使用谓词检查两个元素是否相对有序。例如,
a
。这有点技术性,但请参见。这是因为这些容器按顺序存储元素。如果要查找哈希容器,它们的前缀都是相同的e> 无序的…
,例如。