相关疑难解决方法(0)

删除重复项和排序向量的最有效方法是什么?

我需要带有可能包含大量元素的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执行后保持排序?

或者还有另一种(也许是更有效的)方法来做这一切吗?

c++ sorting stl vector duplicates

254
推荐指数
13
解决办法
31万
查看次数

随机插入/删除的综合载体与链表基准

所以我知道这个问题,而其他关于SO的问题涉及到问题,但大多数处理数据结构的复杂性(只是复制到这里,理论上将其与O连接起来(

我理解复杂性似乎表明列表会更好,但我更关注现实世界的表现.

注意:这个问题的灵感来自于Bjarne Stroustrup在2012年Going Native上的演示45和46,其中他讨论了处理器缓存和引用的位置如何真正有助于向量,但根本没有(或足够)列表.

问题:有没有一种很好的方法来测试这个使用CPU时间而不是墙上时间,并获得一种"随机"插入和删除可以事先完成的元素的体面方式,因此它不会影响时间?

作为奖励,能够将其应用于两个任意数据结构(例如矢量和哈希映射或类似的东西)以在某些硬件上找到"真实世界性能"将是很好的.

c++ benchmarking linked-list vector

5
推荐指数
1
解决办法
1280
查看次数

std :: vector中的重复元素

我有一个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()方法计数,但这不起作用.但我希望得到每个元素的计数,而不是计算所有...任何想法?

c++ vector count

3
推荐指数
2
解决办法
7101
查看次数

标签 统计

c++ ×3

vector ×3

benchmarking ×1

count ×1

duplicates ×1

linked-list ×1

sorting ×1

stl ×1