dict・set・heapの対応
コンテナごとに順序と計算量が違います。名前だけでなく、何を高速に取り出せるかで選びます。
言語:C++ / 計算量:例の処理による
前提:sortとlower_bound / set と辞書で「見たこと」を記録
考え方
- dictに近いのは unordered_map、順序付きは map。
- set は順序付き集合、unordered_set はハッシュ集合。
- priority_queue は標準で最大値が先。最小値には greater を指定します。
具体例
Python heapq は最小ヒープ。C++ priority_queue<int> の top() は最大値です。
実装
#include <iostream>
#include <queue>
#include <vector>
#include <functional>
using namespace std;
int main(){priority_queue<int,vector<int>,greater<int>>q;q.push(5);q.push(2);cout<<q.top()<<"\n";}注意する条件
map の [] は存在しないキーを挿入します。読み取りだけなら find や contains(対応規格)を使います。
確認問題
標準の priority_queue<int> に2,5,3を入れたtopは?
解答と理由
5
デフォルトでは最大値を取り出します。
実装課題
N と整数列 A。異なる値の個数を set を使って出す。N≤200000。
入力:
4
2 2 5 3
出力:
3参考実装
#include <iostream>
#include <set>
using namespace std;
int main(){int n;cin>>n;set<int>s;while(n--){int x;cin>>x;s.insert(x);}cout<<s.size()<<"\n";}