是否有具有用户定义的冲突处理程序的 std::唯一样式库算法
Is there a std::unique-style library algorithm that has user-defined collision handler?
我有一个基本的 std::键/值对向量。它按键排序。我想在压缩向量的同时使用用户定义的二进制运算符减少所有相邻的重复键条目。
这基本上是一个 std::unique 应用程序,用户可以在其中决定如何处理冲突,而不仅仅是保留第一个条目。
是否有满足此要求的库算法?我可以自己写,但我更愿意依靠专家写的东西。
按排序的地图向量是算法其他部分的核心,无法更改。我仅限于C++14。
我想不出一个标准的算法。 std::unique
几乎满足了要求,但不幸的是,您提供的用于比较元素的 BinaryPredicate 不允许修改它们("binary_pred不得通过取消引用的迭代器应用任何非常量函数。 - [算法.要求] C++17 标准(中的第 7 段 - 允许实现更自由地优化的要求(例如,向量不同部分的并行处理(。
不过实现并不太难...
template <typename Iterator, typename BinaryPredicate, typename Compaction>
Iterator compact(Iterator begin, Iterator end, BinaryPredicate equals, Compaction compaction)
{
if (begin == end) return begin;
Iterator compact_to = begin;
while (++begin != end)
if (equals(*begin, *compact_to))
compaction(*compact_to, *begin);
else
*++compact_to = *begin;
return ++compact_to;
}
返回值将是压缩向量的新"结束" - 您可以像remove_if
一样从中erase
。
您可以在此处看到它正在运行。
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 何时在引用或唯一指针上使用移动语义
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- C++优先级队列,按对象的唯一指针的特定方法升序排列
- 是否有具有用户定义的冲突处理程序的 std::唯一样式库算法
- 生成跨系统唯一数字的算法
- 我的递归算法中的问题,用于查找所有最短、唯一的路径
- 查找具有唯一标签的前 K 元素的算法
- 唯一数据的排序算法
- 这是在包含非唯一元素的未排序数组中选择第k个最大数的最快算法
- 唯一表单算法和列表容器的唯一性有什么区别
- [唯一相等运算符]在集合中查找重复元素并将其分组的快速算法是什么
- 输出“std::multiset”的唯一元素及其频率,使用C++中的std::算法(无循环)
- 非唯一的c++无序交集算法
- 实现O(n)算法来确定字符串是否所有字符都是唯一的
- 计算包含某些项的列表集合的唯一排列的算法
- 查找所有唯一二叉搜索树的算法的时间复杂度是多少?
- 唯一的算法对向量c++
- 用于查找具有最唯一值的'n'集的伪代码或算法?