dict・set・heapの対応

コンテナごとに順序と計算量が違います。名前だけでなく、何を高速に取り出せるかで選びます。

言語:C++ / 計算量:例の処理による

前提:sortとlower_bound / set と辞書で「見たこと」を記録

考え方

  1. dictに近いのは unordered_map、順序付きは map。
  2. set は順序付き集合、unordered_set はハッシュ集合。
  3. 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";}

読了の記録・下書き・メモへ

関連する公式資料・課題