HyeLog
[알고리즘 (C++)] vector, string, map 에서 원소 찾기, 존재 여부 확인 (find 함수) 본문
알고리즘 문제를 풀다보면 각종 자료형에서 어떤 원소가 있는지 없는지 존재 여부를 확인하고 싶을 때가 자주 있다.
느낌상 find() 를 쓰면 될거같지만,,, 자료형마다 find() 사용법이 조금씩 달라서 헷갈릴 수 있어서 정리해본다👍
1️⃣ vector 의 find()
vector 에서 사용할 find() 는 <algorithm> 헤더에 존재하는 함수다.
사용법: find(자료형의 시작 iter, 자료형의 끝 iter, 찾고 싶은 원소)
→ 만약 그 원소가 존재하면, 그곳을 가리키는 iter 를 반환하고, 존재하지 않으면, ⭐vector의 끝 iter⭐ 를 반환한다.
+ 이걸 응용하면, find(v.begin(), v.end(), 찾을 원소) - v.begin() 이렇게 찾을 원소의 인덱스도 알아낼 수 있다🙌
// #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
*/
2️⃣ 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
*/
3️⃣ map 의 find()
map 은 사실 인덱스 접근 만으로도 해당 원소의 존재 여부를 확인할 수 있다. (단, 0이나 빈 문자열을 값으로 가지지 않을때만!!) 왜냐면, 인덱스에 접근하는 것만으로도 그 인덱스에 해당하는 값이 int형 맵일 경우 0, string/char형 맵일 경우 빈 문자열로 초기화되어 생기기 때문이다.
⭐만약 값으로 0이나 빈 문자열을 가질 수 있다면, 반드시 find() 를 사용해야 원소의 존재 유무를 확인할 수 있다.
#include <map> 해야하는건 아시죠?👍
사용법: 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
*/
'알고리즘' 카테고리의 다른 글
변수 1개로 visited (방문 배열) 나타내기 (ft. 비트마스킹) (0) | 2023.09.29 |
---|---|
[C++] reverse(), rotate(), copy() 로 배열 다루기 (0) | 2023.04.08 |
[Visual Studio, C++] 파일 읽기, 쓰기 방법(input.txt, output.txt) (0) | 2023.02.02 |
우선순위 큐, Pair, 최소힙, 최대힙 (0) | 2023.02.01 |
C++ 1차원, 2차원 배열 초기화 방법 (fill) (2) | 2023.01.31 |