주어진 키가 맵에 있는지 확인하고 다소 할 수 없습니다.
typedef map<string,string>::iterator mi;
map<string, string> m;
m.insert(make_pair("f","++--"));
pair<mi,mi> p = m.equal_range("f");//I'm not sure if equal_range does what I want
cout << p.first;//I'm getting error here
p에있는 내용을 어떻게 인쇄 할 수 있습니까?
답변
사용하다 map::find
if ( m.find("f") == m.end() ) {
// not found
} else {
// found
}
답변
맵에 특정 키가 존재하는지 확인하려면 count
다음 방법 중 하나로 멤버 함수를 사용하십시오 .
m.count(key) > 0
m.count(key) == 1
m.count(key) != 0
그만큼 문서 에는 map::find
말한다 : “다른 멤버 함수는, map::count
단지 특정 키가 존재하는지 여부를 확인하는 데 사용할 수 있습니다.”
그만큼 문서 에는 map::count
말한다 : “지도 컨테이너의 모든 요소가 고유하기 때문에 (요소가 발견되는 경우) 함수는 1을 반환 할 수 있습니다 또는 (기타) 제로.”
존재하는 키를 통해지도에서 값을 검색하려면 map :: at을 사용하십시오 .
value = m.at(key)
달리 지도 : 연산자 [] , map::at
지정된 키가 존재하지 않을 경우지도에 새로운 키를 생성하지 않습니다.
답변
C ++ 20 은이 std::map::contains
를 가능하게합니다.
#include <iostream>
#include <string>
#include <map>
int main()
{
std::map<int, std::string> example = {{1, "One"}, {2, "Two"},
{3, "Three"}, {42, "Don\'t Panic!!!"}};
if(example.contains(42)) {
std::cout << "Found\n";
} else {
std::cout << "Not found\n";
}
}
답변
당신은 사용할 수 있습니다 .find()
:
map<string,string>::iterator i = m.find("f");
if (i == m.end()) { /* Not found */ }
else { /* Found, i->first is f, i->second is ++-- */ }
답변
m.find == m.end() // not found
다른 API를 사용하려면 다음을 찾으십시오. m.count(c)>0
if (m.count("f")>0)
cout << " is an element of m.\n";
else
cout << " is not an element of m.\n";
답변
당신이 원하는 것 같아요 map::find
. 이 ( m.find("f")
가) 같으면 m.end()
키를 찾을 수 없습니다. 그렇지 않으면 find는 찾은 요소를 가리키는 반복자를 리턴합니다.
p.first
스트림 삽입에는 작동하지 않는 반복자 이기 때문에 오류가 발생 합니다. 마지막 줄을로 변경하십시오 cout << (p.first)->first;
. p
반복자, p.first
반복자, p.first->first
키 문자열입니다.
지도는 주어진 키에 대해 하나의 요소 만 가질 수 있으므로 equal_range
그다지 유용하지 않습니다. 모든 연관 컨테이너에 대해 정의되었으므로 맵에 대해 정의되었지만 멀티 맵에는 훨씬 더 흥미 롭습니다.
답변
C++17
으로 이것을 조금 더 단순화했습니다 If statement with initializer
. 이렇게하면 케이크를 먹고 먹을 수 있습니다.
if ( auto it{ m.find( "key" ) }; it != std::end( m ) )
{
// Use `structured binding` to get the key
// and value.
auto[ key, value ] { *it };
// Grab either the key or value stored in the pair.
// The key is stored in the 'first' variable and
// the 'value' is stored in the second.
auto mkey{ it->first };
auto mvalue{ it->second };
// That or just grab the entire pair pointed
// to by the iterator.
auto pair{ *it };
}
else
{
// Key was not found..
}