The C++ Function using STL to Check Duplicate Elements/Character

  • 时间:2020-09-17 14:37:27
  • 分类:网络文摘
  • 阅读:124 次
cplusplus The C++ Function using STL to Check Duplicate Elements/Characters in Array/Vector/String c / c++ data structure programming languages

cplusplus

Let’s say we want to implement a C++ function based on STL containers to check if a given string contains duplicate characters, or a given vector/array contains duplicate elements. Luckily we can use the unordered set (or set which maintains order), that we can construct a set based on the vector/array/string, then we just need to compare the sizes of both set and the original container – if they are equal, it means all unique elements or duplicates otherwise.

1
2
3
4
bool hasDuplicateCharacters(string arr) {
    unordered_set<char> st(begin(arr), end(arr));
    return st.size() != arr.size();
}
bool hasDuplicateCharacters(string arr) {
	unordered_set<char> st(begin(arr), end(arr));
	return st.size() != arr.size();
}

Example:

1
2
cout << (hasDuplicateCharacters("abcde") ? "true" : "false"); // false
cout << (hasDuplicateCharacters("abcdea") ? "true" : "false"); // true
cout << (hasDuplicateCharacters("abcde") ? "true" : "false"); // false
cout << (hasDuplicateCharacters("abcdea") ? "true" : "false"); // true

We can use the C++ generic that allows us to pass in most data types – using the templates.

1
2
3
4
5
template <typename T>
bool hasDuplicateItems(vector<T> arr) {
    unordered_set<T> st(begin(arr), end(arr));
    return st.size() != arr.size();
}
template <typename T>
bool hasDuplicateItems(vector<T> arr) {
	unordered_set<T> st(begin(arr), end(arr));
	return st.size() != arr.size();
}

Example:

1
2
3
cout << (hasDuplicateItems<int>({ 1, 2, 3, 4 }) ? "true" : "false");  // true
cout << (hasDuplicateItems</int><int>({ 1, 2, 3, 4, 1 }) ? "true" : "false"); // false
</int>
cout << (hasDuplicateItems<int>({ 1, 2, 3, 4 }) ? "true" : "false");  // true
cout << (hasDuplicateItems</int><int>({ 1, 2, 3, 4, 1 }) ? "true" : "false"); // false
</int>

This is quite similar approach to checking the duplicates in Javascript – which is also based on the Set.

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
早餐吃鸡蛋7大好处及快速烹调法  把虾皮作为补钙佳品还需三思而行  饮食健康:保护肝脏必吃8种蔬菜  常吃四种食物可有效排出体内毒素  哪种蔬菜是冬季餐桌上的“当家菜”  揭秘:吃腰子真能补肾壮阳吗?  冬季经常喝新鲜梨汁的九大好处  百果之王红枣的营养价值和保健功效  姜对身体好处多但晚上不宜大量食用  糖尿病患者饮食误区 吃得太少致营养不良 
评论列表
添加评论