[解決済み] タプルとタイで比較演算を実装するのは良いアイデアか?
質問
(注
tuple
と
tie
は Boost または C++11 から取ることができます)。
要素が2つしかない小さな構造体を書くとき、私はときどき
std::pair
のように、重要なことはすべてそのデータ型に対してすでに行われているためです。
operator<
のように、そのデータ型に対して既に行われているからです。
しかし、欠点は、かなり無駄な変数名です。たとえ私自身がその
typedef
を作ったとしても、2日後には何を作ったか覚えていないでしょう。
first
とか
second
がまさにそうであったように、特にそれらが両方とも同じ型である場合はそうです。これは2つ以上のメンバーではさらに悪くなります。
pair
の入れ子はかなり最悪です。
そのためのもう一つの選択肢は
tuple
であり、Boost または C++11 のものですが、これでは見た目がすっきりしません。そこで、必要な比較演算子を含め、構造体を自分で書くことに戻りました。
特に
operator<
はかなり面倒なので、この混乱を回避するために、私はただ
tuple
:
の例
operator<
は、例えば strict-weak-ordering のためのものです。
bool operator<(MyStruct const& lhs, MyStruct const& rhs){
return std::tie(lhs.one_member, lhs.another, lhs.yet_more) <
std::tie(rhs.one_member, rhs.another, rhs.yet_more);
}
(
tie
を作る
tuple
の
T&
を参照します)。
編集
: の非公開継承という @DeadMG さんの提案。
tuple
を非公開で継承するという @DeadMG からの提案は、悪いものではありませんが、かなり多くの欠点があります。
- 演算子が独立したものである場合(おそらく友人)、私は公に継承する必要があります。
-
キャスティングで、私の関数 / 演算子 (
operator=
特に) は簡単にバイパスすることができます。 -
を使用すると
tie
ソリューションでは、順序付けに重要でない場合、特定のメンバーを省くことができます。
この実装で考慮しなければならない欠点はありますか?
どのように解決するのですか?
これは確かに、自分でロールバックするよりも正しい演算子を書く方が簡単になりそうです。プロファイリングにより、比較操作がアプリケーションの時間のかかる部分であることが示された場合にのみ、別のアプローチを検討するように言っておきます。そうでなければ、これを維持することの容易さは、考えられるパフォーマンスの懸念を上回らなければなりません。
関連
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】「corrupted size vs. prev_size」glibc エラーを理解する。
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] Pythonにおけるincrementとdecrement演算子の挙動
-
[解決済み] Pythonにはなぜ++と--の演算子がないのですか?
-
[解決済み】ビットシフト(bit-shift)演算子とは、どのようなもので、どのように機能するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】Enterキーを押して続行する
-
[解決済み】エラー。引数リストに一致するコンストラクタのインスタンスがない