std::map에서 특정 key가 있는지 알아내려면

std::map에서 키가 이미 있는지 없는지 알아내고 싶은데 어떻게 해야 하나요? 제 코드는 에러를 내네요

소스 코드

typedef map<string,string>::iterator mi;
map<string, string> m;
m.insert(make_pair("f","++--"));
pair<mi,mi> p = m.equal_range("f"); //equal_range를 써도 되는지 잘 모르겠어요
cout << p.first;//여기서 에러

1답변

  • 좋아요

    0

    싫어요
    채택취소하기

    key를 조사하는 함수는 map::find() 입니다.

    원형:

    1. iterator find (const key_type& k);
    2. const_iterator find (const key_type& k) const;

    파라미터:

    • k: 찾고 싶은 key

    return 값:

    • key를 찾은 경우: element의 iterator
    • key를 못 찾은 경우 : map::end
    if ( m.find("f") == m.end() ) {
      // not found
    } else {
      // found
    }
    



    iterator가 아니라 그냥 조사만 하는 경우라면 std::count()을 쓰는게 더 편할 수도 있습니다.

    원래 count()는 원소가 몇 개인지 세는 함수이지만 std::map container의 원소들은 하나하나가 다 고유(unique)한 값이기 때문에 key가 존재하면 1을, 존재하지 않으면 0을 return합니다.

    따라서 그냥 검사만 하는 경우는 다음과 같이 써 주세요

    if ( m.count(key) ){}

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

작성한 답변에 다른 개발자들이 댓글을 작성하거나 댓글에 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.