カスタムコンパレータを指定しなくても、pair <int、int>の優先キューはどのように機能しますか?

Umedh Singh Bundela

Astd::priority_queuestd::vectorデフォルトのコンテナとしてaを使用します(これを参照してください)。の最初の要素に基づいて並べ替えるにはstd::vector<pair<int, int>>、独自の比較関数を定義する必要があります(これを参照してください)。これが私が理解していることです。

ここで、次のコードは、kO(NlogK)の空でない配列で最も頻繁な要素を返します

class Solution {
public:
    vector<int> topKFrequent(vector<int>& nums, int k) {
        if(nums.empty())
            return vector<int>();

        unordered_map< int, int > hashMap;
        for(int i=0; i<nums.size(); i++)
            hashMap[nums[i]]++;

        priority_queue< pair< int, int >> pq;
        vector< int > result;
        unordered_map< int, int >::iterator it=hashMap.begin();

        for(it=hashMap.begin(); it!=hashMap.end(); it++) {
            //the first one is frequency and the second one is the value
            pq.push(make_pair(it->second, it->first));

            //the peculiar implementation below is because we the code to be O(NlogK)
            if(pq.size()>(hashMap.size()-k)) {
                result.push_back(pq.top().second);
                pq.pop();
            }
        }

        return result;
    }
};

このコードは正しく機能し、裁判官に受け入れられます-しかし、どのように?基になるコンテナとしてstd::priority_queue使用するstd::vector<pair<int, int>>は、正しくソートされるように、カスタム比較関数を含める必要があります。それで、それはどのように機能しますか?

WhozCraig

率直に言って、それはそうするように設計されているので機能します。

いくつかのこと:

  • astd::priority_queuestd::less<T>Tオーバーライドが指定されていない場合のデフォルトのコンパレータとして、を使用します。ここで、は基になるシーケンス値タイプです。
  • std::less<T>operator <2つのT引数に対して呼び出し、最適なものや利用可能なものに解決します。

したがって、これがシーケンスタイプコンパレータの特別なオーバーライドなしで希望どおりに機能する場合はoperator <std::pair<int,int>そのワイヤにこのすべてが一緒に存在することを意味する必要があります

そして確かにあります。のドキュメントを確認するとstd::pair<T1,T2>operator <これを効果的に行うオーバーロードがあることがわかります

if (lhs.first < rhs.first)
    return true;
else if (!(rhs.first < lhs.first))
    return lhs.second < rhs.second
else
    return false;

これがどのように機能するかについてのマインドプレイの例は、読者が考えることに任されています。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

(int)ケースはどのように機能しますか?

分類Dev

この優先キューはどのように機能しますか?

分類Dev

long intキャストはJavaでどのように機能しますか?

分類Dev

int(* p)[10]はどのように機能しますか?

分類Dev

int *&variableNameはどのように機能しますか?

分類Dev

Java優先度付きキューは内部でどのように機能しますか?

分類Dev

Androidのintカラーコードはどのように機能しますか?

分類Dev

Androidのintカラーコードはどのように機能しますか?

分類Dev

新しいint [n]()はどのように機能しますか?

分類Dev

double to int castはJavaでどのように機能しますか

分類Dev

Android TextView.SetText(int resid)はどのように機能しますか?

分類Dev

int array [30] = {0}; これはcでどのように機能しますか?

分類Dev

C / C ++:int array [10] = {0}はどのように機能しますか?

分類Dev

参照関数「int&foo();」はどのように機能しますか 作業?

分類Dev

fetchNext(int)メソッドはjooqでどのように機能しますか?

分類Dev

Android Room DAO @Insert with return value(long or int)はどのように機能しますか?

分類Dev

SQL ServerのGUIDキーとintキーのインデックス作成はどのように機能しますか?

分類Dev

set <pair <int、int >>のイテレータをどのように理解しますか?

分類Dev

vector <pair <int、int >>のコンパレータ

分類Dev

int []のカスタムコンパレータ

分類Dev

「final int i」はJava forループ内でどのように機能しますか?

分類Dev

文字列の引用符、長さの合計数、およびarrayname [int]はどのように機能しますか?

分類Dev

関数コンパレータがソートのように優先キューで機能しないのはなぜですか?

分類Dev

Task <int>はどのようにしてintになりますか?

分類Dev

Javaでdoubleからintへの変換はどのように機能しますか?

分類Dev

long longからintへの変換はどのように機能しますか?

分類Dev

Java優先キューはどのように機能するはずですか?

分類Dev

jodaの新しいDateTimeに関する問題(int、int、int、int、int、int、int)

分類Dev

予期されたstrインスタンス、intが見つかりました。このコードを機能させるには、intをstrに変更するにはどうすればよいですか?

Related 関連記事

  1. 1

    (int)ケースはどのように機能しますか?

  2. 2

    この優先キューはどのように機能しますか?

  3. 3

    long intキャストはJavaでどのように機能しますか?

  4. 4

    int(* p)[10]はどのように機能しますか?

  5. 5

    int *&variableNameはどのように機能しますか?

  6. 6

    Java優先度付きキューは内部でどのように機能しますか?

  7. 7

    Androidのintカラーコードはどのように機能しますか?

  8. 8

    Androidのintカラーコードはどのように機能しますか?

  9. 9

    新しいint [n]()はどのように機能しますか?

  10. 10

    double to int castはJavaでどのように機能しますか

  11. 11

    Android TextView.SetText(int resid)はどのように機能しますか?

  12. 12

    int array [30] = {0}; これはcでどのように機能しますか?

  13. 13

    C / C ++:int array [10] = {0}はどのように機能しますか?

  14. 14

    参照関数「int&foo();」はどのように機能しますか 作業?

  15. 15

    fetchNext(int)メソッドはjooqでどのように機能しますか?

  16. 16

    Android Room DAO @Insert with return value(long or int)はどのように機能しますか?

  17. 17

    SQL ServerのGUIDキーとintキーのインデックス作成はどのように機能しますか?

  18. 18

    set <pair <int、int >>のイテレータをどのように理解しますか?

  19. 19

    vector <pair <int、int >>のコンパレータ

  20. 20

    int []のカスタムコンパレータ

  21. 21

    「final int i」はJava forループ内でどのように機能しますか?

  22. 22

    文字列の引用符、長さの合計数、およびarrayname [int]はどのように機能しますか?

  23. 23

    関数コンパレータがソートのように優先キューで機能しないのはなぜですか?

  24. 24

    Task <int>はどのようにしてintになりますか?

  25. 25

    Javaでdoubleからintへの変換はどのように機能しますか?

  26. 26

    long longからintへの変換はどのように機能しますか?

  27. 27

    Java優先キューはどのように機能するはずですか?

  28. 28

    jodaの新しいDateTimeに関する問題(int、int、int、int、int、int、int)

  29. 29

    予期されたstrインスタンス、intが見つかりました。このコードを機能させるには、intをstrに変更するにはどうすればよいですか?

ホットタグ

アーカイブ