Как распечатать все элементы данного номера ведра в с ++ unordered_set? - PullRequest
0 голосов
/ 18 июня 2020

У меня есть unordered_set<string> ht в c ++, для которого заданный номер ведра говорит x, я должен распечатать все элементы в этом заданном ведре ht [x] ie Я пытаюсь напечатать все элементы в данном ведре число х. В последнем блоке else это:

unordered_multiset<string>ht;
ll m;
cin>>m;
ht.reserve(m);
ll q;
cin>>q;
while (q--){
    string cmd;
    cin>>cmd;
    if(cmd=="add"){
        string s;
        cin>>s;
        if(ht.find(s)==ht.end()){
            ht.insert(s);
        }
    }else if(cmd=="del"){
        string s;
        cin>>s;
        if(ht.find(s)!=ht.end()){
            auto it = ht.find(s);
            ht.erase(it);
        }
    }else if(cmd=="find"){
        string s;
        cin>>s;
        if(ht.find(s)!=ht.end()){
            cout<<"yes"<<'\n';
        }else{
            cout<<"no"<<'\n';
        }
    }else{
        ll x;
        cin>>x;
        auto it = ht.begin(x);
        for(; it!=ht.end(x);it++){
            cout<<*it<<' ';
        }
        cout<<'\n';
    }

1 Ответ

1 голос
/ 18 июня 2020

Функции-члены begin(<bucket number>) и end(<bucket number>) могут использоваться для перебора элементов в заданном сегменте c. Функция-член bucket_count() возвращает количество сегментов. Итак:

#include <unordered_set>

int main() {
    std::unordered_set<int> foo;

    for(size_t bno = 0; bno < foo.bucket_count(); ++bno) {
        for(auto bit = foo.begin(bno), end = foo.end(bno); bit != end; ++bit) {
            const auto& element = *bit;
            // do stuff with element
        }
    }
}
...