C++容器——集合(unordered_multiset)

1 はじめに

unowned_multiset は、キー値によって繰り返しが可能な連想コンテナです。追加、変更、クエリには線形の時間計算量があり、そのストレージ構造はハッシュ テーブルです。要素は特定の順序で格納されず、バケットに編成され、どのバケットが依存するかが決まります。そのハッシュ値。

ヘッダー ファイルと定義

#include <unordered_set>

template<
    class Key,
    class Hash = std::hash<Key>,
    class KeyEqual = std::equal_to<Key>,
    class Allocator = std::allocator<Key>
> class unordered_multiset;

2. 初期化

unowned_multiset の初期化は次のようになります

/*
* @brief unordered_multiset 
* @g++ -g unordered_multiset_main.cc -o d -std=c++11
* @author 
* @date 2023/03/27
*/

#include <iostream>
#include <unordered_set>
#include <string>
#include <iterator>

template<typename T>
void showInfo(T& t)
{
    
    
    for(const auto& au : t)
    {
    
    
        std::cout<<au<<"  ";
    }
    std::cout<<std::endl;
}


int main(int argc, char* argv[])
{
    
       
    //直接初始化     
    std::unordered_multiset<std::string> un_s1{
    
    "c++", "c", "Rust", "golang", "Rust","Rust","linux", "matlab"};
    showInfo(un_s1);

    std::unordered_multiset<std::string> un_s2;
    un_s2.emplace("student");
    un_s2.emplace("student");
    un_s2.insert("teacher");
    un_s2.insert("teacher");

    //拷贝初始化
    std::unordered_multiset<std::string> un_s3 = un_s2;
    showInfo(un_s3);
    
    return 0;    
}

出力

linux  golang  Rust  Rust  Rust  matlab  c  c++
teacher  teacher  student  student

3.使用する

unowned_setと同じ操作をサポートします

ただし、count()、find()、equal_range() およびその他のメソッドでは、unowned_multiset の方がより大きな役割を果たします。

int main(int argc, char* argv[])
{
    
       
    //操作 count()  find()   equal_range()
    std::unordered_multiset<std::string> un_s1{
    
    "c++", "c", "Rust", "golang", "Rust","Rust","linux", "matlab"};
    showInfo(un_s1);
    std::cout<<"\ncount() of Rust is: "<<un_s1.count("Rust")<<"\n\n";

    std::cout<<"[find() test]\n";
    auto iter = un_s1.find("Rust");
    std::cout<<*iter<<std::endl;
    std::advance(iter, 1);
    std::cout<<*iter<<std::endl;
    std::advance(iter, 1);
    std::cout<<*iter<<std::endl<<std::endl;

    std::cout<<"[equal_range() test]\n";
    auto iter_equal = un_s1.equal_range("Rust");
    std::cout<<std::distance(iter_equal.first,iter_equal.second)<<"\n";

    while (iter_equal.first != iter_equal.second)
    {
    
    
        std::cout<<*iter_equal.first<<" ";
        std::advance(iter_equal.first, 1);
    }
    std::cout<<std::endl;       
    
    return 0;    
}

結果

linux  golang  Rust  Rust  Rust  matlab  c  c++

count() of Rust is: 3

[find() test]
Rust
Rust
Rust

[equal_range() test]
3
Rust Rust Rust

おすすめ

転載: blog.csdn.net/shouhu010/article/details/129795469