지도에이 동일한 키를 여러 번 삽입하려고했지만 값이 다릅니다. 작동하지 않습니다. 나는 operator []가이 작업을 수행한다는 것을 알고 있지만, insert의이 동작이 맞다면 나의 질문은 무엇입니까? insert()하지 말아야합니까? 나는 어떤 표준이 말하는지 궁금해. 불행히도 나는 그것을 (표준 C++에 대한) 그래서 내가 확인할 수 없습니다.
도움이되는 ansers에 감사드립니다.왜 std :: map에서 insert를 업데이트하지 않으시겠습니까? [C++]
5
A
답변
14
대신 std::multimap
이 필요합니다.
키가 이미 존재하는 경우 std::map::insert
은 아무 작업도 수행하지 않습니다. std::map::operator[]
은 이전 값을 덮어 씁니다.
STL 참조의 경우 C++ 표준 자체가 필요하지 않습니다. http://www.cplusplus.com/reference/ 같은 것도 할 것입니다.
5
나는 완전히 이해하고 있는지 확신 할 수는 없지만 맵에서 이전 항목을 덮어 쓰는 것처럼 들립니다. map
은 키당 값을 으로 저장합니다.
대신에 multi_map
을 사용해야합니다. 이렇게하면 같은 값으로 다른 키를 삽입 할 수 있습니다. 너는 operator[]
을 이렇게 잃는다. 왜냐하면 그것은 실제로 의미가 없기 때문이다. (., 확실히 삽입하지만 운영자는 검색 할 때 어떤 값이 검색해야합니까?)
여기 (here에서 수정) 예 : 당신이 다른 값과 동일한 키를 삽입 할 경우
#include <iostream>
#include <map>
int main(void)
{
std::multimap<std::string, int> m;
m.insert(std::make_pair("a", 1));
m.insert(std::make_pair("b", 2));
m.insert(std::make_pair("c", 3));
m.insert(std::make_pair("a", 4));
m.insert(std::make_pair("b", 5));
m.insert(std::make_pair("a", 6));
std::cout << "Number of elements with key a: " << m.count("a") << endl;
std::cout << "Number of elements with key b: " << m.count("b") << endl;
std::cout << "Number of elements with key c: " << m.count("c") << endl;
std::cout << "Elements in m: " << endl;
for (m::iterator it = m.begin(); it != m.end(); ++it)
{
std::cout << " [" << it->first << ", " << it->second << "]" << endl;
}
}
관련 문제
- 1. 어떤 작업이 std :: map에서 스레드로부터 안전합니까?
- 2. 참조로 std :: map에서 객체를 얻는 것이 안전합니까?
- 3. std :: map에서 항목을 필터링하는 방법은 무엇입니까?
- 4. C++ std :: map에서 가장 큰 키를 찾는 방법?
- 5. Gmail 채팅 상태를 자동으로 업데이트하지 않으시겠습니까?
- 6. const map에서 읽는 관용적 인 C++
- 7. 왜 C++ std :: exception :: what 멤버가 const입니까?
- 8. std :: map에서 각 노드의 깊이를 찾는 방법은 무엇입니까?
- 9. 왜 std :: string :: max_size() == std :: string :: allocator :: max_size()
- 10. 왜 std :: bad_function_call이 발생합니까?
- 11. C++/STL - std :: map에서 클래스 포인터 인스턴스에 액세스 할 때 프로그램이 충돌 함
- 12. 왜 std :: string은 빈 rep입니까?
- 13. AsyncCallback이 왜 내 gridview를 업데이트하지 않습니까?
- 14. AssemblyInfo.cs를 확인하지 않으시겠습니까
- 15. 왜 std :: pow (double, int)가 C++ 11에서 제거 되었습니까?
- 16. C++ 0x | 왜 std :: atomic가 휘발성 한정자로 각 메소드를 오버로드합니까?
- 17. std :: sort 및 std :: unique에 해당하는 C#
- 18. 테이블을 공유하거나 공유하지 않으시겠습니까?
- 19. 왜 항상 std :: for_each에서 반복자를 지정해야합니까?
- 20. 왜 std :: map :: operator []가 반 직관적입니까?
- 21. 매우 간단한 C++ 문을 사용하지만 cout을 사용하지 않으시겠습니까?
- 22. OpenGL - 사용하거나 사용하지 않으시겠습니까? 왜 - iPhone 응용 프로그램 개발자
- 23. C++ std :: unordered_map
- 24. C++ 버전 std :: map
- 25. std :: C의 대안 C
- 26. Google Map에서 Polyline을 그리는 법
- 27. 왜 std :: strstream가 더 이상 사용되지 않았습니까?
- 28. 언제 php 파일을 닫지 않으시겠습니까?
- 29. 마우스를 강조 표시하지 않으시겠습니까?
- 30. 레일을 방해하지 않으시겠습니까?
감사합니다. 적어도 15 자 이상이어야하므로이 텍스트를 입력합니다. –