5

std::set<std::string>引数または戻り値を持つ C++ メソッドがいくつかあります。frozensetこれを Python (または通常の )にマップしたいのsetですが、これを行う簡単な方法はないようです。このタスクを達成する方法を知っている人はいますか。

4

2 に答える 2

1

または、std::map<YourType, int>代わりに を使用できstd::set<YourType>ます。値は、たとえば 0 にすることができます。std::map は、std::set と同じ挿入/検索時間の複雑さを持ち、キーの順序も保持します。メモリが少し膨張するだけです。次に、マップ インデックス スイートを使用できます。Python では、必要に応じて一部のラッパー クラスの違いを隠すことができます。欠点は、既存の C++ コードを少し変更する必要があることです。

于 2012-11-14T14:18:23.753 に答える
0

残念ながら、indexing_suiteBoost.Python の標準は をサポートしていませんstd::set。すべての stl コンテナで動作する indexing_suite v2 があります。(http://mail.python.org/pipermail/cplusplus-sig/2009-July/014704.html)

正式なディストリビューションにはなっていないかもしれませんが、周りに尋ねれば見つけることができます。(http://mail.python.org/pipermail/cplusplus-sig/2009-July/014691.html)

元の よりも使いにくいと思いましたがindexing_suite、ニーズに合うかもしれません。

それがうまくいかない場合std::set<std::string>は、他のクラスと同じように手動でラップできます。これにより、かなり簡単にstd::set<std::string>Pythonに変えることができます。set


どちらも必要以上の仕事だと思います。これが私がすることです:

最初に、C++ の関数を同じシグネチャを持つ関数でラップしますが、返されたデータをstd::vector<std::string>ではなく に詰め込みstd::set<std::string>ます。元の機能ではなくその機能を公開する

これで、Python にデータができました。

std::vector<std::string>次に、データを取得して python に詰め込むpython 関数で c++ 関数をラップしますset

はい、これはデザインの美学の観点からはかなりばかげており、世界で最もパフォーマンスの高いコードではありませんが、最小限のコードで目的の場所に到達でき、かなり堅牢です。

于 2011-02-10T15:45:57.837 に答える