如何创建自定义拼贴器
How to create a custom collator?
我使用以下代码作为函数对字符串列表进行排序:
bool stringLessThan(const string& str1, const string& str2)
{
const collate<char>& col = use_facet<collate<char> >(locale()); // Use the global locale
string s1(str1);
string s2(str2);
transform(s1.begin(), s1.end(), s1.begin(), ::tolower);
transform(s2.begin(), s2.end(), s2.begin(), ::tolower);
const char* pb1 = s1.data();
const char* pb2 = s2.data();
return (col.compare(pb1, pb1 + s1.size(), pb2, pb2 + s2.size()) < 0);
}
我将全局区域设置为:
locale::global(locale("pt_BR.UTF-8"));
如果我使用en_EN.UTF-8
语言环境,我的语言(葡萄牙语-巴西)中带有重音的单词将按照我想要的不同顺序排列。所以我使用pt_BR.UTF-8
。但是,字符串"as"在"a"之前,我想要"a"然后是"as"。
原因是collator忽略了空格和字符串,比如:
a pencil
an apple
将被视为:
apencil
anapple
如果排序,将按以下顺序出现:
an apple
a pencil
但我想要:
a pencil
an apple
我用Java做了这个,解决方案是创建一个自定义的collator。但是在c++中,我该如何处理它呢?
尝试创建自己的collator类或比较函数。虽然在Java中,更惯用的方法可能是通过扩展来实现这一点,但在c++中,对于您的情况,我建议使用组合。
这只是意味着您的自定义collator类将有一个collator成员,它将使用该成员来帮助执行排序,而不是从collate
类派生。
至于你的比较规则,似乎你需要明确地实现你自己的逻辑。如果你不想忽略空格,也许你应该标记你的字符串。
相关文章:
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- 自定义创建QFuture
- 从具有自定义排序的向量创建集合
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 创建包装升压适配器的自定义范围类
- 如何使用 C 指针的自定义删除器创建unique_ptr?
- 如何使用MSVC 2019创建和使用Qt 5.14.0自定义小工具插件
- 创建具有验证和语法突出显示的自定义 printf
- 如何为使用创建窗口创建的窗口创建自定义背景颜色
- 如何创建可重新创建的自定义要求
- 如何为自定义模板对象创建专门的函数模板
- 在自定义构造函数中的堆上创建指针
- 从函数为 std::vector 创建自定义扩展
- Qt5自定义QDialog,不使用qt创建器
- 是否有任何统一的方法可以在 c++ 中创建自定义比较器?
- 查询数据库以在 C++ 中创建自定义类集合的最佳方法
- 在 QLayout 中创建和删除自定义 QWidgets 时出现 RAM 问题
- 创建自定义向量类错误
- 我什么时候用cocos2d-x中的参数初始化自定义创建函数中的变量?