問題タブ [stl-algorithm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1013 参照

c++ - 古い GCC では std::back_inserter に const_reference が必要です。なんで?

現在、GCC の新しいバージョンではコンパイルできるが、古いバージョンではコンパイルできないコードを検討しています。私の場合、あるデータ構造からカスタム データ構造までのデータを使用しstd::back_inserterています。ただし、このカスタム データ構造std::copyの typedef を忘れると、 GCC 4.4 でコンパイルされません。typedef value_type & const_reference同じコードは、GCC 4.5 で問題なくコンパイルおよび実行されます。

これらの 2 つのコンパイラ バージョンの違いは何ですか。コードは一方のバージョンではコンパイルされますが、もう一方のバージョンではコンパイルされません。GCC 4.4 では完全ではなかった C++11 の実装と関係があると思います。おそらく何か、decltypeまたは別の新しい C++11 キーワードがあると思います。

std::back_inserterまた、型を定義せずに を使用した場合、このコードは正しいconst_referenceですか? 通常、STL アルゴリズム ライブラリと互換性を持たせるには、typedef の完全なセット ( 、value_typeなど) を実装する必要があると考えていました。または、この場合にコードがコンパイルされた場合、危険なもの (たとえば、他のデータ構造を破壊する移動セマンティクス) を呼び出していないと安全に想定できますか?referenceconst_reference

0 投票する
3 に答える
9206 参照

algorithm - LCSアルゴリズム(例)

2 つのシーケンスの最長共通サブシーケンスを見つけるための動的計画法アルゴリズムがあります。2 つのシーケンス X と Y の LCS アルゴリズムを見つけるにはどうすればよいですか (正しさのテスト)

0 投票する
5 に答える
3130 参照

c++ - O(n)時間未満でstd::setのランダム要素を選択する方法は?

この質問には制約が追加されています。

偏りがない限り、不均一な選択を許可します。

セットは通常、二分探索木として実装されており、バランスをとるためにある種の深さまたはサイズの情報が含まれていると予想されるため、木の重み付きランダムウォークを実行できると思います。ただし、それを行うためのリモートで移植可能な方法は知りません。

編集: 制約は、償却された時間に対するものではありません。

0 投票する
1 に答える
1015 参照

c++ - C++ で配列を含むオブジェクトのカスタム std::set コンパレータを作成する

ここで質問を簡単にしようとしています。メンバー変数として int 配列を持つ構造体が 1 つあります。

elem ポインターを std::set に入れたいのですが、後で find() を使用してそのセットから特定のオブジェクトを検索したいので、この std::set にカスタム コンパレーターを提供したいと考えています。

コンパレータのロジックを教えてください。任意のサイズの配列の一般的なロジックはありますか?

0 投票する
2 に答える
1897 参照

c++ - コンテナ内の要素のメンバー関数からの結果を累積する

次のように、カウントを返す関数を持つクラスがあります。

そして、私のプログラムのどこかに、そのクラスのオブジェクトのベクトルがあります。通常のループのように実装された、合計カウント(CTestClass :: GetCount()の結果の合計)を取得する関数があります。

標準ライブラリで利用できる機能を利用するようにリファクタリングしたいので、と思いましたaccumulate。関数オブジェクトを使用して(簡単に)実行できましたが、別のオブジェクトを宣言しなくても実行できるとほぼ確信しています(C ++ 11またはブーストがないため、ラムダはありませんが、 TR1を持っている)。
答えを探しているとき、私はこれらのリソースを見つけましたが、それらは質問を解決しません:

  • これはほとんど同じ質問であり、提供される答えはループ、アキュムレートとファンクター、アキュムレートとラムダですが、バインドなどへの未回答の参照があります。
  • 同様の質問に対するこの回答では、、、accumulateおよびplusを 使用bindしていますが、メンバー関数の代わりにデータメンバーを使用しています。

それで、bindまたは同様のものを使用してこれを行う方法はありますか?

0 投票する
3 に答える
1621 参照

c++ - STL-ソートが期待どおりに機能しない

これを正しく使用しているように感じますが、コンパイラはそうではないと感じます。stl sortアルゴリズムを使用して、sort_by_name関数でコースのリストをアルファベット順にソートしようとしています。これは大まかに私が書いたものです:

エラー:

助けてくれてありがとう。

0 投票する
1 に答える
1692 参照

c++ - std::自己定義型との差を設定

私は自分の構造体を次のように定義しました

と一緒に使用していstd::setます。set_differenceアルゴリズムを使用したい(2つのセットの違いを判別するための前の質問ですでに述べたように。コードを呼び出そうとすると、コンパイルが停止し、次のエラーメッセージが表示されます。

最小限の例は次のようになります。

0 投票する
1 に答える
175 参照

c++ - 構造体からデータにアクセスするとき、演算子のオーバーロードはどこに行きますか?

構造体のベクトルをソートする関数が構造体にあります。しかし、ベクトル内の2つの要素を比較するには、同じ構造体内の別の変数の値が必要です。この種の機能を実現するには、演算子のオーバーロードまたは比較関数をどこに保持すればよいのか疑問に思いました。次のペーストでサンプルを提供しました。

もちろん、これは機能しません。比較関数のために他の多くのシグネチャとスコープを試しましたが、何も機能していないようです。

ここで何ができるか考えてみませんか?

0 投票する
2 に答える
140 参照

c++ - std::copyフック

std::copyと同様の機能を使用していると仮定しstd::remove_ifます...フックを追加するための最良の方法は何ですか?特に、コピーのステータスをログに記録したいと思います。最後に、次と同等のものが必要です。

しかし、使用std::copy

0 投票する
1 に答える
1006 参照

c++ - std :: set_symmetric_differenceを使用する場合、std :: map <>::value_typeに基づくSTLコンテナのテンプレートタイプ

std :: mapの2つのインスタンスがある場合、std :: set_set_symmetric_difference()アルゴリズムを使用してすべての違いを保存しようとしています。私は次の作業コードを持っています:

これは私が期待するものを印刷します:

私を悩ませているのは、マップとの違いのベクトルであるMyPairsのtypedefです。

typedef std::vector< MyMap::value_type > MyPairs最初は、Non-static const memberの受け入れられた回答に記述されている次のエラーが発生したときのように、ベクトルをtypedefしようとしましたが、デフォルトの代入演算子を使用できません

これは、マップ内の値のキーがconstであるため、キーを変更したり、マップを無効にしたりすることを回避できます。これは理にかなっています。これは、ベクトルに要素を追加するためstd::map<Key,Value>::value_typestd::pair<const Key, Value>意味operator=()を使用できないためです。これが、私の作業例でconstを指定しない理由です。

冗長ではないMyPairsベクトルのテンプレートパラメーターを定義するためのより良い方法はありますか?私がこれまでに思いついた最高のものはstd::vector< std::pair<MyMap::key_type, MyMap::mapped_type> >