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