我需要带有可能包含大量元素的C++向量,擦除重复项并对其进行排序.
我目前有以下代码,但它不起作用.
vec.erase(
std::unique(vec.begin(), vec.end()),
vec.end());
std::sort(vec.begin(), vec.end());
Run Code Online (Sandbox Code Playgroud)
我怎样才能正确地做到这一点?
此外,首先擦除重复项(类似于上面编码)或首先执行排序是否更快?如果我首先执行排序,是否保证在std::unique执行后保持排序?
或者还有另一种(也许是更有效的)方法来做这一切吗?
所以我知道这个问题,而其他关于SO的问题涉及到问题,但大多数处理数据结构的复杂性(只是复制到这里,理论上将其与O连接起来(
我理解复杂性似乎表明列表会更好,但我更关注现实世界的表现.
注意:这个问题的灵感来自于Bjarne Stroustrup在2012年Going Native上的演示45和46,其中他讨论了处理器缓存和引用的位置如何真正有助于向量,但根本没有(或足够)列表.
问题:有没有一种很好的方法来测试这个使用CPU时间而不是墙上时间,并获得一种"随机"插入和删除可以事先完成的元素的体面方式,因此它不会影响时间?
作为奖励,能够将其应用于两个任意数据结构(例如矢量和哈希映射或类似的东西)以在某些硬件上找到"真实世界性能"将是很好的.
我有一个std::vector,我想检查其中的所有元素.如果某个元素出现不止一次,我会发出错误信号.
我就这样做了:
std::vector<std::string> test;
test.push_back("YES");
test.push_back("YES");
for(int i = 0; i < test.size(); i++)
{
if(test[i] > 1)
{
DCS_LOG_DEBUG("ERROR WITH COUNT")
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我知道如何使用该std::vector::count()方法计数,但这不起作用.但我希望得到每个元素的计数,而不是计算所有...任何想法?