해결된 질문
작성
·
24
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::npos
를 반환합니다.str.find("substring")
map::find
메서드
end()
이터레이터를 반환합니다.map.find(key)
요약하자면:
- std::find
: 순차 컨테이너에서 특정 값을 찾을 때 사용합니다.
- string::find
: 문자열 내에서 특정 문자열이나 문자를 찾습니다.
- map::find
: 연관 컨테이너에서 특정 키를 찾고자 할 때 사용합니다.
아래 링크들은 이러한 함수의 사용에 대한 보다 구체적인 설명을 제공합니다. 참고하시면 도움이 될 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.