使用集合检测重复项

新手上路,请多包涵

我正在处理不应弹出两次的数据。如果是,它应该检测到它并调用一个处理它的函数。

目前,我正在将一些数据推送到一个向量,在插入之前,它应该检查数据是否已经包含在该向量中。目前,这不是很有效,例如

for (int i = 0; i < myVector.size() ; i++)
{
  if ( myVector[i] == data )
  {
             // invoke function
             return false;
  }
}

我知道 set 是一种特殊的向量,它只允许唯一的数据。

是否有另一种方法来检测添加(或至少尝试添加)重复数据到 set

原文由 Darlyn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 427
2 个回答

首先让我们明确一点, set 不是一种特殊的 vector 。它是一种与向量正交的容器,恰好可以防止重复。

您可以通过检查 insert 的返回值来检测重复项:

 if(my_set.insert("value").second == false) { do_something_for_duplicate(); }

原文由 Mark B 发布,翻译遵循 CC BY-SA 3.0 许可协议

std::set returns std::pair<iterator, bool> , where the bool is false when the insertion failed (by adding duplicate values for example).

例子:

 std::set<int> set{ 1, 2, 3 };
auto result = set.insert(1);
if (!result.second)
    std::cout << "Failed to insert element!" << std::endl;

原文由 Rakete1111 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题