我正在使用visual c ++构建网络入侵检测系统,其中一个组件是整个网络的tcp会话管理器。 tcp会话数据存储在并发向量中,以便可以从其他线程访问它。我发现在会话关闭后,没有简单的方法可以从并发向量中删除会话。所以我的问题是你知道从同步向量中删除项目的最聪明的方法。
智能==相当容易编程,没有太多的性能影响 三江源
答案 0 :(得分:1)
我考虑在这里使用std::set
而不是向量 - 特别是如果存储的项目数量很大。我想你也经常想要执行查找。
对于O(log(n))
,搜索和删除集合的复杂度为O(n)
,而不是std::vector
- 尽管O(1)
中的普通插入案例不是O(log(n))
与集合。
您还需要使用互斥锁来保护所有这些操作。