C++: How to Iterate the Elements over the Sets (set, unordered_s

  • 时间:2020-09-11 08:17:29
  • 分类:网络文摘
  • 阅读:98 次

In C++, we use set, multiset, unordered_multiset, unordered_set to store a hash set. C++ set/multiset implements a Red-Black tree that maintains the order of the elements. On the other hand, the unordered_set and unordered_multiset are based on Hashmap/Hashtable thus the elements are not sorted.

The multiset and unordered_multiset allows storing the duplicates in the set. To iterate over the sets, we can just use the simple for loop:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <unordered_set>
 
using namespace std;
 
int main() {
    unordered_set<int> data;
    data.insert(5);
    data.insert(3);
    data.insert(2);
    data.insert(3);
    data.insert(6);
    data.insert(7);
    for (const auto &n: data) {
        cout << n << endl;
    }
    return 0;
}
#include <iostream>
#include <unordered_set>

using namespace std;

int main() {
	unordered_set<int> data;
	data.insert(5);
	data.insert(3);
	data.insert(2);
	data.insert(3);
	data.insert(6);
	data.insert(7);
	for (const auto &n: data) {
		cout << n << endl;
	}
	return 0;
}

Duplicates are stored only once. And the unordered_set does not sort the elements. Thus you may see different order e.g. 7 6 2 5 3.

Iterating over the C++ set is similar. The output shows that elements are ordered. The C++ set O(logN) update/insert/delete/query is slower than unordered_set which has O(1) constant complexity.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <set>
 
using namespace std;
 
int main() {
    set<int> data;
    data.insert(5);
    data.insert(3);
    data.insert(2);
    data.insert(3);
    data.insert(6);
    data.insert(7);
    for (const auto &n: data) {
        cout << n << endl; // prints 2 3 5 6 7
    }
    return 0;
}
#include <iostream>
#include <set>

using namespace std;

int main() {
	set<int> data;
	data.insert(5);
	data.insert(3);
	data.insert(2);
	data.insert(3);
	data.insert(6);
	data.insert(7);
	for (const auto &n: data) {
		cout << n << endl; // prints 2 3 5 6 7
	}
	return 0;
}

For multiset and unordered_multiset, iterating over the elements are similar except that the results will print the duplicates.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <set>
 
using namespace std;
 
int main() {
    multiset<int> data;
    data.insert(5);
    data.insert(3);
    data.insert(2);
    data.insert(3);
    data.insert(6);
    data.insert(7);
    for (const auto &n: data) {
        cout << n << endl; // prints 2 3 3 5 6 7
    }
    return 0;
}
#include <iostream>
#include <set>

using namespace std;

int main() {
	multiset<int> data;
	data.insert(5);
	data.insert(3);
	data.insert(2);
	data.insert(3);
	data.insert(6);
	data.insert(7);
	for (const auto &n: data) {
		cout << n << endl; // prints 2 3 3 5 6 7
	}
	return 0;
}

Note that the C++ multiset is included in set header and unordered_multiset is provided in unordered_set header.

Alternatively, we can increment the iterator to start from begin() to end() of the sets: (set, multiset, unordered_set, and unordered_multiset). We use *it to de-reference the iterator pointer.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <set>
 
using namespace std;
 
int main() {
    multiset<int> data;
    data.insert(5);
    data.insert(3);
    data.insert(2);
    data.insert(3);
    data.insert(6);
    data.insert(7);
    for (auto it = begin(data); it != end(data); it ++) {
        cout << *it << endl; // prints 2 3 3 5 6 7
    }
    return 0;
}
#include <iostream>
#include <set>

using namespace std;

int main() {
	multiset<int> data;
	data.insert(5);
	data.insert(3);
	data.insert(2);
	data.insert(3);
	data.insert(6);
	data.insert(7);
	for (auto it = begin(data); it != end(data); it ++) {
		cout << *it << endl; // prints 2 3 3 5 6 7
	}
	return 0;
}

–EOF (The Ultimate Computing & Technology Blog) —

推荐阅读:
华娱卫视在线直播「高清」  新城财经台直播「高清」  香港本港台直播-亚洲电视本港台直播-atv直播「高清」  深度剖析:电脑打板的全过程-故障排查  如何高效管理你的电脑数据传输?技巧大揭秘-故障排查  Win11开始菜单怎么关闭最近使用文件显示  本港国际台直播「高清」  TVB星河台直播「高清」  win7怎么装osx  win7怎么设置流畅 
评论列表
添加评论