C++のstd::equalやstd::mismatchで指定範囲の要素を比較する
std::equalは指定した範囲をoperator==で比較します。
std::vector<std::string> vec1, vec2;
vec1.push_back("C++");
vec1.push_back("Java");
vec1.push_back("Python");
vec2.push_back("C++");
vec2.push_back("Java");
vec2.push_back("Python");
//vec1.begin()からvec1.end()までの範囲をoperator==で比較する
if (std::equal(vec1.begin(), vec1.end(), vec2.begin())) {
std::cout << "equal" << std::endl;
} else {
std::cout << "not equal" << std::endl;
}
std::equalの第4引数で、operator==の代わりに比較する関数を指定できます。
#include <algorithm>
//大文字小文字を区別しないで比較する
struct compare {
bool operator()(const std::string& s1, const std::string& s2) {
return (stricmp(s1.c_str(), s2.c_str()) == 0);
}
};
std::vector<std::string> vec1, vec2;
vec1.push_back("C++");
vec1.push_back("Java");
vec1.push_back("Python");
vec2.push_back("c++");
vec2.push_back("java");
vec2.push_back("python");
if (std::equal(vec1.begin(), vec1.end(), vec2.begin(), compare())) {
std::cout << "equal" << std::endl;
} else {
std::cout << "not equal" << std::endl;
}
std::mismatchは2つのシーケンスの等しくない最初の要素を返します。
std::vector<std::string> vec1, vec2;
vec1.push_back("C++");
vec1.push_back("Java");
vec1.push_back("Python");
vec2.push_back("C++");
vec2.push_back("Java");
vec2.push_back("python");
std::pair<std::vector<std::string>::iterator, std::vector<std::string>::iterator> p =
std::mismatch(vec1.begin(), vec1.end(), vec2.begin());
std::cout << *(p.first) << std::endl; //Python
std::cout << *(p.second) << std::endl; //python
Pingback: Tweets that mention C++のstd::equalやstd::mismatchで指定範囲の要素を比較する « 山本隆の開発日誌 -- Topsy.com