C++ 按第一个值按降序排列一组对,然后按第二个值按字母顺序排列
我有一组成对的整数和集合,例如: 项目={(2,{“A”,“B”,“C”}),(3,{“C”}),…}C++ 按第一个值按降序排列一组对,然后按第二个值按字母顺序排列,c++,stl,comparator,std-pair,stdset,C++,Stl,Comparator,Std Pair,Stdset,我有一组成对的整数和集合,例如: 项目={(2,{“A”,“B”,“C”}),(3,{“C”}),…} 我用这种方式设置它,因为stl集合可以通过为声明编写一个比较器来轻松排序,但是我不知道如何编写这样一个函数来完成我需要的工作。我需要根据整数值(一对中的第一个值)按降序打印,如果两个项目共享一个整数值,则按字符串的字母顺序打印。目前,它按整数值的升序和字符串的字母顺序打印。我将在下面附上预期和当前输出 set<pair<int, set<string>>>
我用这种方式设置它,因为stl集合可以通过为声明编写一个比较器来轻松排序,但是我不知道如何编写这样一个函数来完成我需要的工作。我需要根据整数值(一对中的第一个值)按降序打印,如果两个项目共享一个整数值,则按字符串的字母顺序打印。目前,它按整数值的升序和字符串的字母顺序打印。我将在下面附上预期和当前输出
set<pair<int, set<string>>> outputSet;
map<set<string>, int> supportMap;
set<set<string>> candidateItemSets;
vector<set<set<string>>> frequentItemSets;
for(int i = 0; i < frequentItemSets.size(); i++){
for(auto it = frequentItemSets[i].begin(); it != frequentItemSets[i].end(); it++){
pair<int, set<string>> temp(supportMap[*it],*it);
outputSet.insert(temp);
}
}
for(auto it = outputSet.begin(); it != outputSet.end(); it++){
pair<int, set<string>> temp = *it;
auto sit = temp.second.begin();
auto end = temp.second.end();
advance(end, -1);
cout << temp.first << " [";
for(sit; sit != end; sit++)
cout << *sit << " ";
cout << *sit << "]" << endl;
/**
current output:
2 [A]
2 [A C]
2 [B]
2 [B C]
2 [B C D]
2 [B D]
2 [C D]
2 [D]
3 [C]
expected output:
3 [C]
2 [A]
2 [A C]
2 [B]
2 [B C]
2 [B C D]
2 [B D]
2 [C D]
2 [D]
**/
set输出集;
地图支持地图;
集合候选项集合;
向量频繁项集;
对于(int i=0;i cout一般来说,如果您想要存储项目,并且有关于排序的特定规则,您可以编写一个比较例程,以确保排序是您想要的
std::set,其中comparator有一个函数对象
下面的比较器将反转数字测试,因此顺序是您最初想要的
bool operator()(const std::pair< std::string, int> &lhs, const std::pair<std::string, int> &rhs) const
{
if( lhs.first < rhs.first ) // string ordering is already correct
return true;
if( lhs.first > rhs.first )
return false; // needed to ensure we don't test second.
if( lhs.second > rhs.second )
return true;
return false;
}
bool操作符()(const std::pair&lhs,const std::pair&rhs)const
{
if(lhs.first右首)
return false;//需要确保不进行第二次测试。
如果(左秒>右秒)
返回true;
返回false;
}
您声明了一个集合
的项
,但没有使用项
,而是引用了输出集
。这是错误的吗?谢谢,我修复了错误。您是否尝试过编写比较函数?向我们展示您的尝试。可以使用返回std::tie(rhs.first,lhs.second)