補足
解答欄に補足を書いてしまったので、こちらでも質問内容を訂正します。
(int X,double Y)の組の配列を作り、Yの大きさ順にこの配列をソートしたいです。
どうすれば良いでしょうか?おねがいいたします。
-----以下、最初に書いた質問---
vectorで異なるデータ型のものを入れることはできますか?
C++
1#include<vector> 2using namespace std; 3 4int main(void){ 5 vector<vector<int>> vv; 6 double a[0.1,0.6,0.4]; 7 for(int i=0;i<3;i++){ 8 vv.pushback({i,a[i]});//ここで型の違いでエラーが起きます。 9 } 10}
この問題を解決する方法はありますか? 事情で、できるだけvectorを使いたいです。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
ベストアンサー
(int X,double Y)の組の配列を作り、Yの大きさ順にこの配列をソートしたいです。
素直に実装すると下記コードのようになります。(int X,double Y)の組は構造体Data
型で定義しています。(std::pair
やstd::tuple
を使うという手もありますが、X,Yのように明確な名前を付けられるなら、そのまま構造体を定義したほうがよいです。)
C++
1#include <vector> 2#include <iostream> 3#include <algorithm> 4 5struct Data { 6 int x; 7 double y; 8}; 9 10int main() 11{ 12 // {X,Y}の組の配列(vector) 13 std::vector<Data> vv; 14 15 double a[] = { 0.1, 0.6, 0.4 }; 16 for (int i = 0; i < 3; i++) { 17 // {x,y}ペアを配列に追加 18 vv.push_back({i, a[i]}); 19 } 20 21 for (const auto& e: vv) { 22 std::cout << "{" << e.x << ", " << e.y << "}\n"; 23 } 24 std::cout << "----" << std::endl; 25 26 // Yをキーに昇順ソート 27 std::sort(vv.begin(), vv.end(), [](const auto& a, const auto& b) { 28 return a.y < b.y; 29 }); 30 31 for (const auto& e: vv) { 32 std::cout << "{" << e.x << ", " << e.y << "}" << std::endl; 33 } 34}
投稿2018/10/17 06:47
総合スコア6191
0
std::any案件かと思ったけど
普通にstruct
でいいですね。
c++17以降専用
c++
1#include <iostream> 2#include <vector> 3#include <any> 4using std::cout, std::endl; 5using std::vector, std::any, std::any_cast; 6 7struct values{ 8 int X; 9 double Y; 10 values(int X, double Y); 11}; 12values::values(int x, double y) : X(x), Y(y){} 13 14int main(){ 15 vector<values> vv1; 16 vector<vector<any>> vv2; 17 double a[]{0.1,0.6,0.4}; 18 int i = 0; 19 for(const auto x : a){ 20 vv1.emplace_back(i, x); 21 vv2.push_back({i, x}); 22 i++; 23 } 24 cout << "vv1["; 25 for(auto&& x : vv1){ 26 cout << "{" << x.X << "," << x.Y << "}"; 27 } 28 cout << "]" << endl; 29 cout << "vv2["; 30 for(auto&& x : vv2){ 31 cout << "{" << any_cast<int>(x[0]) << "," << any_cast<double>(x[1]) << "}"; 32 } 33 cout << "]" << endl; 34} 35
投稿2018/10/16 22:28
編集2018/10/16 22:31総合スコア15147
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/17 09:45
2018/10/17 10:00
2018/10/17 12:04 編集
0
追記
すみません。詳しく説明します。
型の違うデータを一つの二次元配列(X,Y)に入れて、
Y(double)の大きさでX(int)の順番をソートしたいです。
そういうことができるものがあったら教えてください。
投稿2018/10/16 20:10
総合スコア26
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/17 09:40
2018/10/17 12:46
2018/10/23 13:09 編集