std::unique算法仅保留连续元素组中的唯一元素。同时,有时了解初始容器中有多少“特定”元素很有用。喜欢对元素数量及其数量进行卷积。
STL中是否有这样的算法或一些简单的方法来做到这一点,而不考虑从头开始编写整个代码(这很容易,但我想尽可能地重用现有的解决方案)并避免像std::unordered_map
std::equal
。
它可能看起来像
std::unique
带有一个额外的迭代器来写入金额或使 std::unique
与
std::pair
一起使用,其中
first
将存储值,而
second
则存储其金额。例如
容器用
[1, 1, 2, 2, 1, 1]
结果我想要两个容器 [1,2,1] 和 [2,2,2],其中第一个容器保存值,第二个容器将它们的金额保存在连续的组中(在本例中为 [1,2] ] 和 [4,2] 可能是一种选择,但这与主题略有不同)
或像 [{1,2}, {2,2}, {1,2}] 这样的一个容器。
借助 C++20
auto l = {1, 1, 2, 2, 1, 1};
auto r = l | std::views::chunk_by(std::ranges::equal_to{})
| std::views::transform([](auto chunk) {
return std::pair{chunk.front(), chunk.size()};
});