如何创建可检测内部是否存在重复数值的vector?
检测C++ Vector中的重复数值方法
针对你需要检测vector内是否存在重复值的需求,这里给你几个适合新手理解的实现方法:
方法一:双重循环遍历(最基础直观)
这是最容易理解的方法,通过两层循环逐个对比元素:
#include <iostream> #include <vector> int main() { std::vector<int> A = {2, 4, 2, 7}; bool hasDuplicate = false; // 外层循环遍历每个元素 for (int i = 0; i < A.size(); ++i) { // 内层循环对比当前元素之后的所有元素 for (int j = i + 1; j < A.size(); ++j) { if (A[i] == A[j]) { hasDuplicate = true; break; // 找到重复就跳出内层循环 } } if (hasDuplicate) break; // 找到重复就跳出外层循环 } if (hasDuplicate) { std::cout << "存在重复数值" << std::endl; } else { std::cout << "不存在重复数值" << std::endl; } return 0; }
思路:每个元素和它后面的所有元素逐一对比,只要找到一对相等的,就判定存在重复。
方法二:排序后检查相邻元素
先对vector排序,重复元素会被排在一起,再遍历检查相邻元素是否相等:
#include <iostream> #include <vector> #include <algorithm> // 用于sort函数 int main() { std::vector<int> A = {2, 4, 2, 7}; bool hasDuplicate = false; // 对vector进行排序 std::sort(A.begin(), A.end()); // 遍历检查相邻元素 for (int i = 0; i < A.size() - 1; ++i) { if (A[i] == A[i + 1]) { hasDuplicate = true; break; } } if (hasDuplicate) { std::cout << "存在重复数值" << std::endl; } else { std::cout << "不存在重复数值" << std::endl; } return 0; }
思路:排序后重复元素会相邻,只需要一次遍历就能检测到重复,效率比双重循环高。
方法三:利用Set自动去重特性
Set容器不允许存储重复元素,把vector的元素存入Set后,对比两者的大小:
#include <iostream> #include <vector> #include <unordered_set> // 用于unordered_set int main() { std::vector<int> A = {2, 4, 2, 7}; std::unordered_set<int> s(A.begin(), A.end()); if (s.size() != A.size()) { std::cout << "存在重复数值" << std::endl; } else { std::cout << "不存在重复数值" << std::endl; } return 0; }
思路:如果vector有重复元素,存入Set后元素数量会减少,所以只要两者大小不同,就说明存在重复。
内容的提问来源于stack exchange,提问作者voltah
相关产品推荐
相关产品推荐

