amazon

18.2.12

std::vectorでIndexOf

c++のstd::vectorはindexofのような関数がない。
std::vectorで、指定した要素が含まれているか調べ、
含まれていたらそのインデックス番号(何番目の要素か)を返す関数を作ってみた。

以下の例では、std::vector<std::string>の中にtargetが含まれるか調べ、
含まれているインデックスのベクトル(std::vector<int>)を返している。

#include <vector>
#include <algorithm>
#include <iostream>

std::vector<int> indexOf( std::vector< std::string > strvec, std::string target ){
    std::vector< int > rt;
    std::vector< std::string >::iterator it = strvec.begin();
    while( strvec.end() != ( it = std::find( it, strvec.end(), target ) ) ){
        rt.push_back( std::distance( strvec.begin(), it ) );
        it++;
    }
    if( rt.empty() ) std::cout << target << " was not found." << std::endl;
    return rt;
}