정수 목록을 키로 사용하고자하므로 먼저 벡터를 키로 사용하는 것이 좋습니다. 이보다 더 좋은 방법이 있습니까?벡터 <int>을 std :: map에서 키로 사용할 수 있습니까?
편집 : 키 크기가 달라질 수 있으며 일부 키에는 수백 개의 정수가 포함될 수 있습니다. 또한 정수 값은 1에서 100,000 사이의 값을 가질 수 있습니다.
정수 목록을 키로 사용하고자하므로 먼저 벡터를 키로 사용하는 것이 좋습니다. 이보다 더 좋은 방법이 있습니까?벡터 <int>을 std :: map에서 키로 사용할 수 있습니까?
편집 : 키 크기가 달라질 수 있으며 일부 키에는 수백 개의 정수가 포함될 수 있습니다. 또한 정수 값은 1에서 100,000 사이의 값을 가질 수 있습니다.
키의 크기 (시퀀스의 정수의 수)가 컴파일 타임에 고정되어 알려지면 std :: array가 더 나은 해결책 일 수 있습니다. 그렇지 않으면 std :: vector는 좋은 해결책이며 문제에 관해서는 언급하지 않았으므로 최상의 해결책 인 것 같습니다.
OP는 이미 크기가 키에 따라 달라질 것이라고 코멘트에서 말했습니다. – UKMonkey
당신이하는 일에 대한 자세한 내용이 없으면 명확하게 대답하기가 어렵습니다.
일반적으로 예, std::vector
을 키로 사용하면 미래의 관리자가 의도를 이해할 수 있도록 표준적이고 간단하며 쉽게하기 때문에 가장 좋은 방법입니다.
그러나 제한 조건이있는 경우 std::vector
을 사용하면 문제가 발생할 수 있습니다. 다른 방법을 사용할 수 있습니다. 예를 들어 메모리가 제한되어 있고 원래 키를지도에서 다시 검색 할 필요가없는 경우 정수로 키를 사용하고 액세스하기 전에 벡터를 해시 할 수 있습니다. 즉, 벡터 자체가 저장되지 않으므로 잠재적으로 메모리를 크게 절약 할 수 있습니다. 그러나 이것은 적절한 해싱 함수 (난 std::hash<std::vector<T>>
이 표준, IIRC에 의해 제공되는 것 같지 않음)를 고안하고 충돌을 처리해야하며 맵에 대한 액세스가 간단하지 않으므로 복잡성이 증가합니다. myMap[MyHashFunc(myVectorOfInts)] = myValue
.
궁극적으로 std::vector
을 사용하면 문제가 없습니다. 그렇지 않다면 질문을 업데이트하여 왜 안되는지 알려주십시오 :)
목록의 크기가 고정되어 있으면'std :: array'를 사용할 수 있습니다. –
벡터의 무엇이 잘못 되었나요? –
아니요, 크기는 키마다 다릅니다. 일부 키의 경우 정수가 수백 개 필요할 수 있습니다. – user1660982