std::将排序谓词映射到按字符串大小排序,但保留不同的字符串
std::map ordering predicate to order by string size but keep different strings?
我需要在映射中存储各种字符串,但我想按大小对它们进行排序。
使用这样的谓词:
struct strsize_less {
bool operator()(const string& l, const string& r) {
return l.size() < r.size();
};
};
将完成排序,但它会丢弃大小相同的字符串
int main() {
typedef map<string, int, strsize_less> mymap_t;
mymap_t mymap;
mymap["j" ] = 0;
mymap["i" ] = 1;
mymap["hh" ] = 2;
mymap["gg" ] = 3;
mymap["fff" ] = 4;
mymap["eee" ] = 5;
mymap["dddd" ] = 6;
mymap["cccc" ] = 7;
mymap["bbbbb"] = 8;
mymap["aaaaa"] = 9;
for( mymap_t::iterator i = mymap.begin(); i!=mymap.end(); ++i )
cout << "k = " << i->first << " - > v= " << i->second << endl;
return 0;
}
输出为:
k = j - > v= 1
k = hh - > v= 3
k = fff - > v= 5
k = dddd - > v= 7
k = bbbbb - > v= 9
我的问题:我可以使用任何谓词来实现以下输出:
k = j - > v= 0
k = i - > v= 1
k = hh - > v= 2
k = gg - > v= 3
k = fff - > v= 4
k = eee - > v= 5
k = dddd - > v= 6
k = cccc - > v= 7
k = bbbbb - > v= 8
k = aaaaa - > v= 9
比较比较器中的大小和字符串:
struct strsize_less
{
bool operator()(std::string const& l, std::string const& r) const
{
if (l.size() < r.size())
return true;
if (l.size() > r.size())
return false;
return l < r;
};
};
或者,使用 C++11 的std::tie
:
struct strsize_less
{
bool operator()(std::string const& l, std::string const& r) const
{
return std::tie(l.size(), l) < std::tie(r.size(), r);
};
};
return l.size() < r.size()
|| (l.size() == r.size() && l < r);
相关文章:
- 提高从排序字符串中获取字母顺序的顺序复杂性
- C 在向量的向量中按字母顺序排序字符串
- 在排序字符串向量中进行有效搜索
- C 选择排序字符串数组
- C 排序字符串的动态阵列 - 排序不起作用
- C++:使用 LSD 基数排序字符串排序崩溃
- 标准::排序 C 字符串的比较函数
- 使用最小运算将给定字符串转换为排序字符串
- C++ - 链表插入排序(字符串元素)
- 分段错误(核心转储)排序字符串数组错误
- 比较函数用于排序字符串的矢量(每个字符串都是一个数字)C++
- std::mutiset vs std::vector,用于读取排序字符串并将其写入文件
- 按字母顺序快速排序字符串矢量
- C++按字母顺序排序字符串
- 按长度排序字符串数组
- 我如何使用c++库函数或STL排序字符串
- 首先按字符排序字符串
- 如何按ASCII顺序排序字符串
- 按字母顺序排序字符串数组
- 按降序排序字符串