std::mismatch
を使用して、構造体の2つのベクトルがまったく同じかどうかを確認しています。通常、私のプログラムでは、そうではありませんが、例外的な場合には起こるかもしれません。私は、次の検索documentationに:戻り値std ::等価ベクトルの不一致
「両方の配列に比べ要素が全て一致した場合、機能は、第二に、同じ相対位置にある要素にlast1する第一セット及び第二セットとペアを返しますシーケンス。
しかし、私は完全に同じである二つのベクトルを作成した場合、のstd ::不一致は値を返しません。私がやろうとしています何の小さな例:
#include <vector>
#include <algorithm>
#include <utility>
struct structwithnumber {
int id;
};
bool compare_structs (structwithnumber* struct1, structwithnumber* struct2) {
return struct1->id == struct2->id;
};
bool compare_structvectors(std::vector<structwithnumber*> v1, std::vector<structwithnumber*> v2) {
if (v1.size() != v2.size())
{
return false;
}
std::pair<std::vector<structwithnumber*>::iterator, std::vector<structwithnumber*>::iterator> mypair;
mypair = std::mismatch(v1.begin(), v1.end(), v2.begin(), compare_structs);
return (compare_structs(*mypair.first, *mypair.second));
}
void simple_example() {
structwithnumber* struct1 = new structwithnumber();
structwithnumber* struct2 = new structwithnumber();
struct1->id = 1;
struct2->id = 2;
std::vector<structwithnumber*> v1;
std::vector<structwithnumber*> v2;
v1.push_back(struct1);
v1.push_back(struct2);
v2.push_back(struct1);
v2.push_back(struct2);
compare_structvectors(v1, v2);
}
私は視覚的なスタジオでこのコードを実行すると、15は、私はライン上のエラーを取得:さらに調査で
return (compare_structs(*mypair.first, *mypair.second));
それはmypair遺骨が判明不一致の後で空です。ドキュメントから、私はこれは各ベクトルの最後の値を返しますが。すべての要素が一致する2つのシーケンスが提示されたときのミスマッチの動作を誤解しましたか?
「私はエラーが発生しました」 - あなたはそのエラーの性質をあなたの聴衆と分かち合いたいですか? (出力ウィンドウからコピー&ペースト) – molbdnilo
[ここ](http://en.cppreference.com/w/cpp/algorithm/mismatch)は、より信頼性の高いリファレンスサイトです。 – molbdnilo