0007容器之unordered_multiset

Posted 寂静_星空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0007容器之unordered_multiset相关的知识,希望对你有一定的参考价值。

#include <list>                                                                                                                                                                                                  
#include<iostream>
#include<vector>
#include<stdexcept>
#include<string>
#include<cstdlib>//abort()
#include<cstdio>//snprintf();整数转字符
#include<ctime>
#include<algorithm>
#include<array>
#include<string>
#include <set>
#include <map>
#include <unordered_set>

using namespace std;
#define NUM 1000000

int main()

    unordered_multiset<string> c;
    char buf[10];
    clock_t timeStart = clock();

    string target = "66666";
    for (long i = 0; i < NUM; ++i)
       
        snprintf(buf, 10, "%d", rand());
        c.insert(string(buf));
        target =  buf;
       
    cout << "毫秒: " << (double((clock() - timeStart))/CLOCKS_PER_SEC * 1000 ) << endl;
    cout << "undered_multiset.size() = " << c.size() << endl;
    cout << "undered_multiset.max_size()= " << c.max_size() << endl;
    cout << "undered_multiset.bucket_count()= " << c.bucket_count() << endl;
    cout << "undered_multiset.load_factor()= " << c.load_factor() << endl;
    cout << "undered_multiset.max_load_factor()= " << c.max_load_factor() << endl;
    cout << "undered_multiset.max_bucket_count()= " << c.max_bucket_count() << endl;
    for (unsigned i = 0; i < 20; ++i)
       
      cout << "bucket #" << i << " has " << c.bucket_size(i) << " elements." << endl;
    

    timeStart = clock();

    auto pItem = c.find(target);
    cout << "c.find() 毫秒: " << (double((clock() - timeStart))/CLOCKS_PER_SEC * 1000 ) << endl;

    if (pItem != c.end())
    
        cout << "find value: " << (*pItem) << endl;
    
    else
    
        cout << "not find " << endl;
    

    timeStart = clock();
    auto pItem1 = ::find(c.begin(),c.end(),target);
    cout << "::find() 毫秒: " << (double((clock() - timeStart))/CLOCKS_PER_SEC * 1000 ) << endl;
    cout << "::findvalue: " << *pItem1 << endl;

    return 0;


C ++中的unordered_multiset指针

我在C ++初学者,我想使用下面的unordered multiset指针的插入函数来添加新元素:

struct Customer {
 size_t operator()(const char& c) const;
};

unordered_multiset<char, Customer>* ms

任何人都可以帮忙吗?

答案
void populate_multiset(const string& s, unordered_multiset<char, CustomHasher>* ms)

鉴于此功能接受string和你的unordered_multiset接受char,你只能插入一个char

for(size_t i = 0; i<s.size(); i++) {
    ms->insert(s[i]); // insert each individual char
}

或者使用迭代器插入一系列char

ms->insert(s.begin(), s.end());

此外,由于标准库已经提供了散列char的方法。你可以简单地宣布

unordered_multiset<char> ms;

但是,如果您确实想要提供自定义哈希函数,则可以。语法与您在问题中的语法完全一样。

将容器传递给函数的一种更常见的方法是通过引用。例如

void populate_multiset(const string& s, unordered_multiset<char, CustomHasher>& ms) 

然后,您可以使用.而不是->来完成同样的事情。

以上是关于0007容器之unordered_multiset的主要内容,如果未能解决你的问题,请参考以下文章

0007JDK源码分析之揭秘整数常量池实现机制

std::unordered_multiset 的用例

c++ unordered_map 自定义key

为啥 unordered_multiset 对许多相等的键不起作用

深入学习c++--容器

C ++中的unordered_multiset指针