Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在使用 Visual C++ 构建一个网络入侵检测系统,它的一个组件是整个网络的 tcp 会话管理器。tcp 会话数据存储在并发向量中,以便可以从其他线程访问。我发现一旦会话关闭,就没有简单的方法可以从并发向量中删除会话。所以我的问题是你所知道的从并发向量中删除项目的最聪明的方法是什么。
智能 == 相当容易编程,不会对性能造成太大影响 谢谢
我会考虑std::set在这里使用 a 而不是向量 - 特别是如果存储的项目数量很大。我想您还想经常执行查找。
std::set
从集合中搜索和删除是O(log(n))复杂的,而不是O(n)针对std::vector- 尽管在集合中微不足道的插入情况是O(1)而不是O(log(n))集合。
O(log(n))
O(n)
std::vector
O(1)
您还需要互斥锁来保护所有这些操作。