いくつかの並べ替え関数による関数の所要時間を格納するテーブル(9 x 11の配列)を作成しようとしています。
テーブルを文字列にしたいと思います。現在、chrono
をstring
に変換する方法を解決できておらず、オンラインでリソースを見つけることができません。
テーブルの文字列タイピングを放棄する必要がありますか、またはこれらの時間差を文字列に保存する方法はありますか?
for (int i = 0; i<8;i++) // sort 8 different arrays
{
start = chrono::system_clock::now();
//Sort Array Here
end = chrono::system_clock::now();
chrono::duration<double> elapsed_seconds = end-start;
table[1][i] = string(elapsed_seconds) // error: no matching conversion for functional style cast
}
_std::ostringstream
_にストリーミングし、そのストリームから文字列を取得する必要があります。
_chrono::duration
_をストリーミングするには、その.count()
メンバー関数を使用してから、ユニット(ns
などのユニット)を追加できます。
この無料のヘッダーのみのオープンソースライブラリ: https://howardhinnant.github.io/date/chrono_io.html は、自動的にduration
を追加することで、あなたのためのユニット。
例えば:
_#include "chrono_io.h"
#include <iostream>
#include <sstream>
int
main()
{
using namespace std;
using namespace date;
ostringstream out;
auto t0 = chrono::system_clock::now();
auto t1 = chrono::system_clock::now();
out << t1 - t0;
string s = out.str();
cout << s << '\n';
}
_
私のために出力してください:
_0µs
_
_"chrono_io.h"
_ がなければ、次のようになります。
_ out << chrono::duration<double>(t1 - t0).count() << 's';
_
使用できる_to_string
_ファミリもあります。
_ string s = to_string(chrono::duration<double>(t1 - t0).count()) + 's';
_
ただし、_to_string
_から直接移動する_chrono::duration
_はありません。 .count()
で「エスケープ」してから、必要に応じてユニットを追加する必要があります。
次のようにchrono::duration_cast
を使用できます。
#include <iostream>
#include<chrono>
#include <sstream>
using namespace std;
int main()
{
chrono::time_point<std::chrono::system_clock> start, end;
start = chrono::system_clock::now();
//Sort Array Here
end = chrono::system_clock::now();
chrono::duration<double> elapsed_seconds = end - start;
auto x = chrono::duration_cast<chrono::seconds>(elapsed_seconds);
//to_string
string result = to_string(x.count());
cout << result;
}
結果:
-秒:
0秒
-µs:
auto x = chrono::duration_cast<chrono::microseconds>(elapsed_seconds);
結果:
535971µs