QSet [QTime](またはこれに類似した)データを格納する必要があります。私がしたいことは、AおよびBは、[INT] 5 7 9 11 13 範囲(6、11)=> 7 9 11存在しない要素によって制限されるQSetのサブセットの取得
すなわちベクトルが存在しない可能性の範囲内の要素のサブセットを取得することです
可能ですか?たぶん、それをする良い方法がありますか? アドバイスありがとうございました
QSet [QTime](またはこれに類似した)データを格納する必要があります。私がしたいことは、AおよびBは、[INT] 5 7 9 11 13 範囲(6、11)=> 7 9 11存在しない要素によって制限されるQSetのサブセットの取得
すなわちベクトルが存在しない可能性の範囲内の要素のサブセットを取得することです
可能ですか?たぶん、それをする良い方法がありますか? アドバイスありがとうございました
明らかな解決策はstd::set<QTime>
です。それは注文され、lower_bound
とupper_bound
メソッドを提供しています。これらは実際の境界がセットに存在することを必要としません。
QSet
は「順序付けられていない」コレクションであり、あなたが求めていることを行うための効率的な操作は特にありません。あなたはかなりそれらを列挙し、それが修飾するかどうかを確認するために、各要素をテストする必要があります。
QSet<QTime> set;
QTime earliest = QTime::fromString("1.30", "m.s");
QTime latest = QTime::fromString("10.30", "m.s");
...
QSet<QTime> subset;
QSetIterator<QTime> i (set);
while (i.hasNext()) {
QTime t = i.next();
if ((t >= earliest) && (t <= latest)) {
subset.insert(t);
}
}
それがあなたの目的のために十分に速くない場合は、異なるデータ構造および技術を使用する必要があります。あなたのサブセットをソートするには、それを順序付けされたコレクションに格納する必要がありますが、実際にはそれを「サブセット」と呼びませんが、「サブレンジ」や「スライス」のようなものです。 (単語は、通常、コンピュータサイエンスに「設定」の要素の順序は、アプリケーションのために興味深いものではありませんことを意味...しかし@MSaltersはstd::set
がは私にニュースをしたために、持っていないことを指摘している!)
コンピュータサイエンスの単語 "set"は、明示的に( 'std :: unordered_set'に反対する)C++の' std :: set'とは無関係です。 – MSalters
std :: setには順序がありますか?私が今までに見たことのある「セット」はすべてオーダーを保証しませんでした。 STLは私がこれに気付くのに十分使用したものではありません...私は彼らに "ordered_set"と "set"と呼ぶと思っていました。これを指摘してくれてありがとう、私は彼らの推論を調べます。 – HostileFork
はい、テンプレートパラメータでもあります: 'template
+1新規の事実...私は、全体的なQtベースのプロジェクトのQtコレクションクラスは、標準ライブラリに対していくつかの異なる機能を提供していることに言及します。私のコードベースに最も関連性のあるものの1つは、スレッドセーフな暗黙的な共有です。http://doc.qt.nokia.com/4.7-snapshot/implicit-sharing.html – HostileFork
暗黙の共有は、マルチスレッドアプリケーションでは負担になることが証明されています。単一の競合したコピーよりも複数の独立したコピーを持つ方がよいでしょう。メモリは安く、同期はできません。 – MSalters