質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.93%

atcoderのC++言語のset<int>の<int>の箇所について理解したいが、何を調べたらよいかわからない

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 266

ratera

score 18

atcoderで、set<int> values;greater<int>()のような記法をみました。
<int>について調べてみたのですが、ポイントが掴めずどういう記法なのかわかりません。

これを教えていただくか、良いサイト・調べるための単語を教えてください。
また、標準ライブラリ(sort())などを調べる際に良いサイトがありましたら、こちらも教えてほしいです

宜しくお願いします。

参考:
https://qiita.com/drken/items/fd4e5e3630d0f5859067#%E7%AC%AC-6-%E5%95%8F--abc-088-b---card-game-for-two-200-%E7%82%B9
http://vivi.dyndns.org/tech/cpp/set.html

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • ratera

    2020/07/05 22:24 編集

    皆さまありがとうございます。
    関数テンプレートで検索したら出ました。

    @raccy
    1になります。テンプレート(または関数テンプレート)で検索したらヒットしました。まずはこのワードを調べることから始めます。ありがとうございました!
    >ずまりC++の「テンプレート」について
    1. 言葉は知っている or 初耳です。

    @angel_p_57
    ご回答ありがとうございます。
    C++で実装する際の文法がわからず、とっかかりとして何で検索したらよいのかわからない状況でした。
    注意事項ありがとうございます。
    以下は、不要なヘッダーを呼び出すため、動作が遅くなったりするという認識であっていますか?
    >必ずしも汎用的に........#include <bits/stdc++.h>とか)、その点注意が必要です

    @SHOMI
    ありがとうございます!。
    タグはC++でサジェストされなかったので、C言語でも良いかな?とミスリードしてしまいました。
    今後、C++で投稿するようにします。

    ご紹介いただいたものは、計算量とか書いてあってうれしいです!。
    (ただ、第三引数のcomp の使い方が想像できないので修行が必要そうですので頑張ります)
    https://ja.cppreference.com/w/cpp/algorithm/sort

    キャンセル

  • SHOMI

    2020/07/05 22:33

    タグや質問はあとからでも編集できます

    キャンセル

  • ratera

    2020/07/06 00:20

    できました(^^♪

    キャンセル

回答 2

+2

atcoderで、set<int> values;greater<int>()のような記法をみました。
<int>について調べてみたのですが、ポイントが掴めずどういう記法なのかわかりません。

クラステンプレート(class template)のテンプレートパラメータ(template parameter)に対して、具体的な型intを指定しています。

  • std::set<Key, Compare, Allocator>クラステンプレートは3個のテンプレートパラメータをとり、少なくとも1番目のテンプレートパラメータKeyには要素型を指定する必要があります。。(2番目, 3番目は省略可能です。)
  • std::greater<T>クラステンプレートは1個のテンプレートパラメータをとります、テンプレートパラメータTには比較対象の型を指定する必要があります。

クラステンプレートそれ自身は型(type)ではないため、下記のような記述はコンパイルエラーとなります。

std::set values;  // エラー
std::greater();   // エラー

クラステンプレートにテンプレートパラメータを指定することで初めて具体的な型となり、変数宣言や一時オブジェクト生成に使えるようになります。

std::set<int> values;  // std::set<int>型の変数valuesを宣言
std::greater<int>();   // std::greater<int>型の一時オブジェクト生成

高度なトピック:C++17からクラステンプレートでもテンプレートパラメータ推論がサポートされたため、一部ケースではソースコード上へのテンプレートパラメータ指定が不要となることがあります。あくまで冗長な記述を省略できるようになっただけですから、まずは基本形を理解されてからになると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/07 08:42

    ご回答ありがとうございます!
    本に書かれていること以上に理解が進みました。

    基本形の理解してから...については、お言葉に甘えて、慣れて困ったらまた向き合う方向で進めさせていただきます!

    キャンセル

checkベストアンサー

+1

まあ次のような順番で調べていくのがいいと思います。

  1. 関数のオーバーロードとは
  2. templateとは
  3. templateクラスとは
  4. 関数オブジェクトとは
  5. lambda式とは
  6. templateが絡むときに爆発しがちなエラーメッセージを解読する方法(ex. C++20コンセプト時代のエラーメッセージとの付き合い方)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/07/06 19:00

    なるほど!
    関数ポインタだと、アドレスから型がわかりづらいので最適化を阻害するのですね!
    かんぜんにりかいしました。

    syntax sugarの説明に角砂糖の写真やら苺ショートやら飯テロ要素が一杯だあああ

    なんかCの文法書はある程度読みましたが、別にC++の文法書をちゃんと読まなければならないことがよくわかりました。重ね重ねありがとうございます。

    キャンセル

  • 2020/07/06 20:01 編集

    関数ポインタというか、ポインタ全般に、何を指しているか解析するのは難しいのです。ポインタは再束縛できるというのもさらに最適化を阻害します。C(C++ではない)ではrestrictキーワードが導入されたのですが、もうすこし知識が増えたら調べてみるといいと思います。たぶん今知るには早すぎます。
    https://yohhoy.hatenadiary.jp/entry/20120223/p1
    https://yohhoy.hatenadiary.jp/entry/20120229/p1
    https://yohhoy.hatenadiary.jp/entry/20120220/p1
    https://stackoverflow.com/questions/57259126/why-does-the-rust-compiler-not-optimize-code-assuming-that-two-mutable-reference

    キャンセル

  • 2020/07/07 08:44

    ありがとうございます(^^♪

    レベルをあげてチャレンジしてみます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.93%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • トップ
  • C++に関する質問
  • atcoderのC++言語のset<int>の<int>の箇所について理解したいが、何を調べたらよいかわからない