인프런 커뮤니티 질문&답변
3주차 수업 질문있습니다.
해결된 질문
작성
·
34
0
안녕하세요 큰돌님:)
제가 지금까지 진행하면서 find와 .find의 사용이 헷갈립니다!!
혹시 어디에는 뭘 사용하는지 정리해주실 수 있을까요?
일단 제가 알고 있는 것은 find()는 이터레이터를 반환하고 실패시 해당 컨테이너의 .end()를 반환합니다.
.find()는 오늘 수업과 "666"문제로 실패 시 string::npos를 반환하는 걸 알았습니다.
find는 보통 순차 컨테이너에 사용하는 거 같고 (map, vector, list 등)
.find 문자열 그리고 map에서 사용하는 거 같습니다.
하지만 이것이 뭔가 정리가 안되어 있는 느낌이라 큰돌님께서 혹시 딱 정리해주실 수 있나요??!!!
사실 map일때 key는 .find를 쓰고 쌍을 찾을 때는 find를 쓰고 너무 헷갈립니다. ㅠㅠ
답변 2
0
안녕하세요 원재님 ㅎㅎ
먼저 find의 종류는 2가지입니다.
① std::find()
<algorithm>모든 순차 컨테이너(vector, list, deque, array 등)이터레이터(iterator)② container.find() 각 컨테이너의 멤버 함수
map,set,unordered_map,unordered_set,string등 컨테이너에 따라 다름
find의 경우.
#include <vector>
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
vector<int> v = {1, 2, 3, 4, 5};
auto it = find(v.begin(), v.end(), 3);
if (it != v.end()) cout << "찾았다: " << *it << endl;
else cout << "못 찾음!" << endl;
}
std::find(시작, 끝, 값)값이 있으면 이터레이터 반환,
없으면 컨테이너의.end()반환선형 탐색이라 시간복잡도 O(n)
vector,deque,list,array에서 보통 쓰입니다.
map.find(), set.find()
#include <map>
#include <iostream>
using namespace std;
int main() {
map<string, int> m;
m["apple"] = 5;
m["banana"] = 3;
auto it = m.find("apple");
if (it != m.end())
cout << "apple의 값은 " << it->second << endl;
else
cout << "apple 없음!" << endl;
}
map.find(key)키(key) 로 빠르게 탐색 (이진 트리 또는 해시)
반환값:
찾으면 해당 key를 가리키는 이터레이터
못 찾으면
m.end()
string.find()
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "hello666world";
size_t pos = s.find("666");
if (pos != string::npos)
cout << "'666' 위치: " << pos << endl;
else
cout << "못 찾음!" << endl;
}
string.find(substring)찾으면 해당 시작 인덱스(size_t) 반환
못 찾으면
string::npos(== -1) 반환npos는 “찾지 못했다”는 의미의 상수
string::npos는 문자열 전용값입니다.
정리하자면, vector 등에서 find() 를 쓰거나 map, set에서 .find()를 쓸 수 있고 반환값은 이터레이터입니다. 그리고 문자열에서 .find()를 쓸 수 있는데 이 때 index 반환, 실패 시 npos 라는점이 다릅니다.
또 질문 있으시면 언제든지 질문 부탁드립니다.
좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)
감사합니다.
강사 큰돌 올림.
0
안녕하세요, 인프런 AI 인턴입니다. 원재님!
C++의 find와 .find 사용에 대해 정리가 필요하신 것 같아 안내해 드리겠습니다.
std::find알고리즘#include <algorithm>헤더에 포함되어 있습니다.
- 주로 순차 컨테이너가 제공된 범위 내에서 특정 값을 찾는 데 사용됩니다. 예를 들어,
std::vector,std::list등이 있습니다.
- 찾고자 하는 값이 발견되면 해당 위치에 대한 이터레이터를 반환하고, 찾지 못하면 제공된 컨테이너의
end()이터레이터를 반환합니다.
- 사용 예시:
std::find(vec.begin(), vec.end(), value)
string::find메서드- 문자열(string) 내에서 특정 문자열이나 문자를 찾기 위해 사용됩니다.
- 찾고자 하는 문자열이 있을 시 해당 위치를 반환하고, 찾지 못하면
string::npos를 반환합니다.
- 사용 예시:
str.find("substring")
- 문자열(string) 내에서 특정 문자열이나 문자를 찾기 위해 사용됩니다.
map::find메서드- 연관 컨테이너(map, unordered_map 등)에서 특정 키를 찾기 위해 사용됩니다.
- 찾고자 하는 키가 있을 경우 해당 키-값 쌍의 위치에 대한 이터레이터를 반환하며, 없을 경우 컨테이너의
end()이터레이터를 반환합니다.
- 사용 예시:
map.find(key)
- 연관 컨테이너(map, unordered_map 등)에서 특정 키를 찾기 위해 사용됩니다.
요약하자면:
- std::find: 순차 컨테이너에서 특정 값을 찾을 때 사용합니다.
- string::find: 문자열 내에서 특정 문자열이나 문자를 찾습니다.
- map::find: 연관 컨테이너에서 특정 키를 찾고자 할 때 사용합니다.
아래 링크들은 이러한 함수의 사용에 대한 보다 구체적인 설명을 제공합니다. 참고하시면 도움이 될 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





