Algorithm

존재 여부 확인 (find 함수)

hjr067 2024. 6. 12. 22:10

vector, string, map에서 원소 찾기 !

 

각종 자료형에서 어떤 원소가 있는지 없는지 존재 여부를 확인하고 싶을 때가 있다.

자료형마다 find() 사용법이 조금씩 달라서 한번 정리해야겠다 ㅇㅁㅇ

 

1) string의 find()

string을 사용하기 위해 #include <string>을 하면 쓸 수 있다.

 

- 사용법

str.find("찾을 문자열")

: 만약 문자열이 존재하면 그 문자열의 시작 위치를 반환하고, 존재하지 않으면 string::npos를 반환

#include <string>
string a = "Hello world!";
auto pos = a.find("world");
if (pos != string::npos) {
	cout << "포함되어 있다." << '\n' << pos << '\n';
}
/*
포함되어 있다.
6
*/

 

 

2) map의 find()

#include <map>

map은 사실 index 접근 만으로도 해당 원소의 존재 여부를 확인할 수 있다.

** 단 ! 0이나 빈 문자열을 값으로 가지지 않을 때만

 

왜냐면 index에 접근하는 것만으로도 그 index에 해당하는 값이 int형 맵일 경우 0, string/char형 맵일 경우 빈 문자열로 초기화되어 생기기 때문이다.

만약, 값으로 0이나 빈 문자열을 가질 수 있다면, 반드시 find()를 사용해야 원소의 존재 유무를 확인할 수 있다.

 

- 사용법

mp.find(찾을 원소)

: 만약 원소가 존재하면, 그곳을 가리키는 iter를 반환하고, 존재하지 않으면 map의 끝 iter를 반환한다.

#include <map>

map<int, char> mp;
for(int i=0; i<3; i++) {
	mp[i] = 'a' + i;
}
if(mp.find(1) != mp.end())
	cout << mp[1] << '\n';
/*
b
*/

 

 

3) vector의 find()

vector에서 사용할 find()는 <algorithm> 헤더에 존재하는 함수이다.

 

- 사용법

find(자료형의 시작 iter, 자료형의 끝 iter, 찾고 싶은 원소)

: 만약 그 원소가 존재하면, 그 곳을 가리키는 iter를 반환하고, 존재하지 않으면 vector의 끝 iter를 반환

 

이걸 응용한다면 find(v.begin(), v.end(), 찾을 원소) - v.begin() 이렇게 찾을 원소의 index로 알아낼 수 있다

 

#include <algorithm>

vector<int> v;
for(int i=0; i<5; i++) 
	v.push_back(i);
auto it = find(v.begin(), v.end(), 9);
if(it == v.end()) cout << "해당 원소 존재 X"<<'\n';
/*
해당 원소 존재 X
*/