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

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

新規登録して質問してみよう
ただいま回答率
86.02%
STL

STL(Standard Template Library)は、ジェネティックコンテイナー、イテレーター、アルゴリズム、そして関数オブジェクトのC++ライブラリーです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

sortを使って合計点を降順にしたい

asyurin
asyurin

総合スコア1

STL

STL(Standard Template Library)は、ジェネティックコンテイナー、イテレーター、アルゴリズム、そして関数オブジェクトのC++ライブラリーです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1回答

0グッド

0クリップ

1231閲覧

投稿2020/07/23 09:30

前提・実現したいこと

C++でそれぞれの合計点を出してそれを降順にsortを使って並べたいのですが合計点をsortするやり方がわかりません

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

C++

int main() {
vector<tokuten> v1;
v1.push_back(tokuten("a", tokuten_array{ {100, 40, 75, 60, 70} } ));
v1.push_back(tokuten("b", tokuten_array{ {69, 82, 48, 50, 83} } ));
v1.push_back(tokuten("c", tokuten_array{ {92, 83, 73, 63, 89 } }));
for (size_t i = 0; i < v1.size(); ++i)
{
cout << v1[i].name <<v1[i].total()<<"点"<< endl;
}

試したこと

sort( v1.begin( ), v1.end( ) );を使用してみましたができませんでした

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

以下のような質問にはグッドを送りましょう

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

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

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

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

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

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

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

適切な質問に修正を依頼しましょう。

SHOMI

2020/07/23 10:19

tokuten,tokuten_arrayとは何者ですか
maai

2020/07/23 11:42

> sort( v1.begin( ), v1.end( ) );を使用してみましたができませんでした 出来なかったではなく、どのような結果が出たのかを書いてください

回答1

0

ベストアンサー

tokuten,tokuten_arrayが何者かわかりませんが、total()で合計点が得られるようなので

C++

1std::sort(v1.begin(), v1.end(), [](auto& lh, auto& rh) {return lh.total() > rh.total();});

投稿2020/07/23 10:33

SHOMI

総合スコア4079

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

asyurin

2020/07/24 05:46

回答ありがとうございます。 もしよろしければ詳しく教えてください
asyurin

2020/07/24 18:46

ありがとうございます! もう一つだけ質問してもいいでしょうか #include <string> #include <vector> #include <algorithm> #include <iostream> #include<numeric> using namespace std; struct score { std::string name; int aaa; int bbb; int ccc; score(std::string n, int a, int b, int c) : name(n), aaa(a), bbb(b), ccc(c) {} }; int main() { std::vector<score> v1; v1.push_back(score("青木", 5, 10, 15)); const float sum = accumulate(v1.begin(), v1.end(), 0); cout << "青木:" << sum<< std::endl; return 0; } これで合計点を出そうと思ったのですが合計できなかったのですが何を変えたらいいでしょうか
SHOMI

2020/07/24 19:23

全然別の内容なのでコメントではなく別途質問していただきたいですが… 何をどう足せばいいのか不明なのでコンパイルできるわけがありません。 std::vector<score> v1; v1.push_back(score("a", 5, 10, 15)); v1.push_back(score("b", 5, 5, 5)); const int sum = accumulate(v1.begin(), v1.end(), 0, [](int sum, const score& s) { return sum + s.aaa + s.bbb + s.ccc; }); cout << "sum:" << sum << std::endl; sum:45
asyurin

2020/07/25 09:31

失礼いたしました。どうしてもSHOMIさんに教えていただきたかったので。。。理解できました。本当にありがとうございました
SHOMI

2020/07/25 10:33 編集

加算方法がわかればいいので、scoreの定義の後に int operator+(int sum, const score& s) { return sum + s.aaa + s.bbb + s.ccc; } のようにintとscoreを加算してintを返すoperator+を定義するか、scoreのメンバとして operator int() { return aaa + bbb + ccc; } を定義しておけば、 const int sum = accumulate(v1.begin(), v1.end(), 0); のままコンパイルできます。 後者の場合は int sum = v1[0]; のようにint型変数に直接代入もできるようになります。

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

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

STL

STL(Standard Template Library)は、ジェネティックコンテイナー、イテレーター、アルゴリズム、そして関数オブジェクトのC++ライブラリーです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。