multisetクラス

http://www.geocities.jp/ky_webid/cpp/library/009.html

前回のsetクラスと殆ど同じです。

setクラスは、同じ値を格納できませんでしたが、multisetクラスの場合は同じ値であっても格納できるようになります。

まずはsetクラスで同値の格納を行った場合どうなるか試してみます。

#include <iostream>
#include <set>
using namespace std;

int main () {
    
    set<int> data;
    
    data.insert(5);
    data.insert(3);
    data.insert(4);
    data.insert(1);
    data.insert(2);
    data.insert(2); // 同じ値を格納
    
    set<int>::iterator it = data.begin();
    
    while( it != data.end() ) {
        cout << *it << endl;
        ++it;
    }
    
    return 0;
}
$ main
1
2
3
4
5

2がひとつ消えていますね。同値は同じ場所に格納されているようなので別の物として扱うことができません。

今度はmultisetクラスで試してみます。

#include <iostream>
#include <set>
using namespace std;

int main () {
    
    multiset<int> data;
    
    data.insert(5);
    data.insert(3);
    data.insert(4);
    data.insert(1);
    data.insert(2);
    data.insert(2); // 同じ値を格納
    
    multiset<int>::iterator it = data.begin();
    
    while( it != data.end() ) {
        cout << *it << endl;
        ++it;
    }
    
    return 0;
}
$ main
1
2
2
3
4
5

ちゃんと2が二つ表示されていますね。別物として扱われているようです。