○vectorの検索
■検索で見つかった物を表示
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <functional>
struct cell{
int no;
char str[64];
};
bool find_no(const cell& o)
{
return o.no == 3 || o.no == 5;//3か5の場合はtrue
}
int main(){
std::vector<cell> data;
cell a;
a.no = 1;strcpy(a.str,"1です");
data.push_back(a);
a.no = 2;strcpy(a.str,"2です");
data.push_back(a);
a.no = 3;strcpy(a.str,"3です");
data.push_back(a);
a.no = 4;strcpy(a.str,"4です");
data.push_back(a);
a.no = 5;strcpy(a.str,"5です");
data.push_back(a);
std::vector<cell>::iterator resolt = data.begin();
resolt=std::find_if(resolt,data.end(),find_no);//find_noにて範囲を指定して検索
if(resolt!=data.end()){// 終わりで無い=見つかった
printf("%s\n",resolt[0].str);
}
return 0;
}
処理結果
3です
■検索で見つかった物をすべて表示
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <functional>
struct cell{
int no;
char str[64];
};
bool find_no(const cell& o)
{
return o.no == 3 || o.no == 5;//3か5の場合はtrue
}
int main(){
std::vector<cell> data;
cell a;
a.no = 1;strcpy(a.str,"1です");
data.push_back(a);
a.no = 2;strcpy(a.str,"2です");
data.push_back(a);
a.no = 3;strcpy(a.str,"3です");
data.push_back(a);
a.no = 4;strcpy(a.str,"4です");
data.push_back(a);
a.no = 5;strcpy(a.str,"5です");
data.push_back(a);
std::vector<cell>::iterator resolt = data.begin();
while(data.end()!=(resolt=std::find_if(resolt,data.end(),find_no))){//resoltがdata.end()になるまで回るループ
printf("%s\n",resolt[0].str);
resolt++;//検索範囲を1進める
}
return 0;
}
処理結果
3です
5です
■二分検索
//二分検索は検索範囲がソートされている必要があります
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <functional>
struct cell{
int no;
char str[64];
};
bool operator==(const cell& left, const cell& right)
{
return left.no == right.no ;
}
bool operator<(const cell& left, const cell& right)
{
return left.no < right.no ;
}
int main(){
std::vector<cell> data;
cell a;
a.no = 1;strcpy(a.str,"1です");
data.push_back(a);
a.no = 2;strcpy(a.str,"2です");
data.push_back(a);
a.no = 3;strcpy(a.str,"3です");
data.push_back(a);
a.no = 4;strcpy(a.str,"4です");
data.push_back(a);
a.no = 5;strcpy(a.str,"5です");
data.push_back(a);
std::sort(data.begin(),data.end());//昇順ソート
a.no=10;
bool f=std::binary_search(data.begin(),data.end(),a);//二分検索 見つかればtrue
if(f) printf("存在します\n"); else printf("存在しません\n");
return 0;
}
処理結果
存在しません
▲トップページ
>
Windows と C++