zoukankan      html  css  js  c++  java
  • C++ std::unordered_multiset

    std::unordered_multiset

    template < class Key,                         // unordered_multiset::key_type/value_type
               class Hash = hash<Key>,            // unordered_multiset::hasher
               class Pred = equal_to<Key>,        // unordered_multiset::key_equal
               class Alloc = allocator<Key>       // unordered_multiset::allocator_type
               > class unordered_multiset;
    

    Unordered Multiset

    Unordered multisets are containers that store elements in no particular order, allowing fast retrieval of individual elements based on their value, much like unordered_set containers, but allowing different elements to have equivalent values.

    In an unordered_multiset, the value of an element is at the same time its key, used to identify it. Keys are immutable(不可变的), therefore, the elements in an unordered_multiset cannot be modified once in the container - they can be inserted and removed, though.

    Internally, the elements in the unordered_multiset are not sorted in any particular, but organized into buckets depending on their hash values to allow for fast access to individual elements directly by their values (with a constant average time complexity on average).

    Elements with equivalent values are grouped together in the same bucket and in such a way that an iterator (see equal_range) can iterate through all of them.

    Iterators in the container are at least forward iterators.

    Notice that this container is not defined in its own header, but shares header <unordered_set> with unordered_set.

    Example

    #include <iostream>
    #include <string>
    #include <unordered_set>    ///> Note: use the unordered_set header
    
    using namespace std;
    
    template<class T>
    T cmerge(T a, T b){
        T t(a);
        t.insert(b.begin(), b.end());
        return t;
    }
    
    int main(int argc, char **argv)
    {
        unordered_multiset<string> first1;
        unordered_multiset<string> first2( {"one", "two", "three"} );
        unordered_multiset<string> first3( {"red", "green", "blue"} );
        unordered_multiset<string> first4( first2 );
        unordered_multiset<string> first5( cmerge(first4,first3) );
        unordered_multiset<string> first6( first5.begin(), first5.end() );
    
        cout << "
    First6 set: ";
        for(const string& x: first6 ){
            cout << "  " << x;
        }
    
        return 0;
    }
    

    Reference

    cplusplus


  • 相关阅读:
    剑指 Offer 22. 链表中倒数第k个节点
    剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
    Leetcode1450. 在既定时间做作业的学生人数
    Leetcode1572. 矩阵对角线元素的和
    Leetcode 1480. 一维数组的动态和
    Idea连接数据库报错
    Java实现二叉树层次遍历并存入List的方法:从上往下,从左往右
    SpringCloud资源网站
    Java循环对list进行remove
    Java中字符串判空的正确打开方式
  • 原文地址:https://www.cnblogs.com/zi-xing/p/6388721.html
Copyright © 2011-2022 走看看