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

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

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

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

C++

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

Q&A

解決済

1回答

1455閲覧

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

asyurin

総合スコア1

STL

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

C++

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

0グッド

0クリップ

投稿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/ツールのバージョンなど)

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SHOMI

2020/07/23 10:19

tokuten,tokuten_arrayとは何者ですか
maai

2020/07/23 11:42

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

回答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型変数に直接代入もできるようになります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問