C++のstd::equalやstd::mismatchで指定範囲の要素を比較する

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

コメント

  1. Pingback: Tweets that mention C++のstd::equalやstd::mismatchで指定範囲の要素を比較する « 山本隆の開発日誌 -- Topsy.com

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください