C ++:如何在集合上迭代元素(集合,无序集合,多集,无序多集)

180it 2020-10-13 PM 2554℃ 0条

在C ++中,我们使用set,multiset,unordered_multiset,unordered_set存储哈希集。C ++ set / multiset实现了一个Red-Black树,该树维​​护元素的顺序。另一方面,unordered_set和unordered_multiset基于Hashmap / Hashtable,因此不对元素进行排序。

multiset和unordered_multiset允许将重复项存储在集中。要遍历集合,我们可以使用简单的for循环:

#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;
}

重复项仅存储一次。而且unordered_set不会对元素进行排序。因此,您可能会看到不同的顺序,例如7 6 2 5 3。

在C ++集上进行迭代是相似的。输出显示元素已排序。C ++集O(logN)更新/插入/删除/查询比unordered_set慢,后者具有O(1)恒定的复杂度。

#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;
}

对于multiset和unordered_multiset,在元素上进行迭代是相似的,只是结果将打印出重复项。

#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;
}

请注意,C ++多重集包含在集合头中,而unordered_multiset包含在unordered_set头中。

或者,我们可以递增迭代器,使其从集合的begin()到end():(集合,多集合,unordered_set和unordered_multiset)。我们使用* it取消引用迭代器指针。

#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;
}

支付宝打赏支付宝打赏 微信打赏微信打赏

如果文章或资源对您有帮助,欢迎打赏作者。一路走来,感谢有您!

标签: none

C ++:如何在集合上迭代元素(集合,无序集合,多集,无序多集)