C++で配列の要素をソートする時のエラー
繰り返し処理の各処理におけるパフォーマンスをプログラムを書いています。
繰り返し処理は、行列の足し算で各要素を足す処理を指しています。
配列に入れた後、昇順にソートします。
以下のコードを組み合わせて、現在のプログラムを書きました。
繰り返し処理(行列の足し算)の参考コード
中央値を求める参考コード
解決したいこと
現在のプログラムをコンパイルするとエラーが表示されるのですが、ソートするための修正方法がわかりません。
プログラムが何をしているかは理解して書いています。
C++に不慣れで、vectorがどんなメソッドや演算子を受け取れるか十分に理解できていないのと、
エラー文「error: invalid operands to binary expression ('std::vector' and 'unsigned long')」からバイナリ式に対する無効なオペランドだと思いますが、doubleをどのように変更すれば実現したいことができるのか検討がつかないです。
検索しても修正方法を理解できるサイトにたどり着くことができず、質問させていただきました。
変数表示に関して参考にしたサイト
ソートに関して参考にしたサイト
コンパイルエラー
$ g++ -o simple simple.cpp
simple.cpp:62:40: error: invalid operands to binary expression ('std::vector<double>' and 'unsigned long')
timedata = sort(timedata, timedata + sizeof(timedata));
~~~~~~~~ ^ ~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/chrono:1202:1: note: candidate template ignored: could not match 'duration'
against 'vector'
operator+(const duration<_Rep1, _Period1>& __lhs, const duration<_Rep2, _Period2>& __rhs)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/chrono:1501:1: note: candidate template ignored: could not match 'time_point'
against 'vector'
operator+(const time_point<_Clock, _Duration1>& __lhs, const duration<_Rep2, _Period2>& __rhs)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/chrono:1512:1: note: candidate template ignored: could not match 'duration'
against 'vector'
operator+(const duration<_Rep1, _Period1>& __lhs, const time_point<_Clock, _Duration2>& __rhs)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iterator:761:1: note: candidate template ignored: could not match
'reverse_iterator<type-parameter-0-0>' against 'unsigned long'
operator+(typename reverse_iterator<_Iter>::difference_type __n, const reverse_iterator<_Iter>& __x)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iterator:1202:1: note: candidate template ignored: could not match
'move_iterator<type-parameter-0-0>' against 'unsigned long'
operator+(typename move_iterator<_Iter>::difference_type __n, const move_iterator<_Iter>& __x)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/iterator:1618:1: note: candidate template ignored: could not match
'__wrap_iter<type-parameter-0-0>' against 'unsigned long'
operator+(typename __wrap_iter<_Iter>::difference_type __n,
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:3993:1: note: candidate template ignored: could not match 'basic_string'
against 'vector'
operator+(const basic_string<_CharT, _Traits, _Allocator>& __lhs,
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:4006:1: note: candidate template ignored: could not match 'const _CharT *'
against 'std::vector<double>'
operator+(const _CharT* __lhs , const basic_string<_CharT,_Traits,_Allocator>& __rhs)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:4018:1: note: candidate template ignored: could not match
'basic_string<type-parameter-0-0, type-parameter-0-1, type-parameter-0-2>' against 'unsigned long'
operator+(_CharT __lhs, const basic_string<_CharT,_Traits,_Allocator>& __rhs)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:4029:1: note: candidate template ignored: could not match 'basic_string'
against 'vector'
operator+(const basic_string<_CharT, _Traits, _Allocator>& __lhs, const _CharT* __rhs)
^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1/string:4041:1: note: candidate template ignored: could not match 'basic_string'
against 'vector'
operator+(const basic_string<_CharT, _Traits, _Allocator>& __lhs, _CharT __rhs)
^
1 error generated.
該当コード
#include <chrono>
#include <iostream>
#include <thread>
#include <vector>
#include <algorithm>
#include <iostream>
//繰り返し処理全体にかかった時間
using namespace std::chrono;
int main()
{
#define N 2
double A[N][N] = {
{3.0, 5.0},
{9.0, 5.0}
};
double B[N][N] = {
{3.0, 6.0},
{8.0, 9.0}
};
double C[N][N] = {
{0.0, 0.0},
{0.0, 0.0}
};
int i, j, k, n;
//各足し算にかかった時間を入れる配列
std::vector<double> timedata;
for(i=0; i<N; i++){
for(j=0; j<N; j++){
//測定開始
std::chrono::high_resolution_clock::time_point start = std::chrono::high_resolution_clock::now();
C[i][j] += A[i][j]+B[i][j];
//測定終了
high_resolution_clock::time_point end = high_resolution_clock::now();
double time = std::chrono::duration_cast<std::chrono::nanoseconds>(end - start).count();
//配列にappend
timedata.push_back(time);
}
}
//print
//std::cout<<timedata<<std::endl;
/*
int hensu;
hensu=10;
std::cout<<hensu<<std::endl;
*/
//配列をソート
timedata = sort(timedata, timedata + sizeof(timedata));
for (int iIndex = 0; iIndex < sizeof(timedata); iIndex++) {
std::cout << timedata[iIndex] << ", "; // 結果をプリントしてみる。
}
/*
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
int aiTable[5] = { 3, 2, 6, -2, 2 }; // 配列を用意する。
sort(aiTable, aiTable + 5); // ソートする。
{for (int iIndex = 0; iIndex < 5; iIndex++) {
cout << aiTable[iIndex] << ", " ; // 結果をプリントしてみる。
}}
return 0;
}
*/
}