c++ end if를 사용하지 않고 std:: unordered_map 요소를 삽입/업데이트하는 가장 빠른 방법은 무엇입니까?




std:: unordered_map operator (4)

현재 다음과 같은 코드가 많이 있습니다.

std::unordered_map<int,int> my_dict;
.
.
.
// If the key does exist in the dictionary
if(my_dict.count(key) == 1){
    my_dict[key] = value;
}

// If its a new key
else{
    my_dict.insert(std::make_pair(key,value));
}

매번 값을 덮어 씀으로써 속도를 높일 수있는 방법이 있습니까?


Answer #1

당신은 단지 ( mapunordered_map 위해)

mydict[key]=value;

Answer #2

일반적으로 동일한 입력을 다시하지 않아도되는 함수를 정의함으로써 추가 타이핑을 피할 수 있습니다. C ++ 17의 insert_or_assign() 대한 액세스 권한이 없으면 다음과 같이 직접 구현할 수 있습니다.

bool InsertOrAssign(std::unordered_map& m, int key, int value) {
  // Your code or one of the suggested answers goes here
}


Answer #4

나는 이것이 다음과 같이 가장 빠를 것이라고 생각한다.

auto it = my_dict.find(key);
if( it != my_dict.end() ) {
    *it = value;
}
else {
    my_dict.insert(std::make_pair(key,value));
}

그런 식으로 key 이미 존재하고 하나의 조회 만있는 경우 unordered_map 의 구조를 수정하지 마십시오.

나중에 / value 액세스 할 필요가없는 경우를위한 또 다른 옵션 :

my_dict[key] = std::move(value);

이것은 value 의 할당이 비싸고 이동 의미론의 이점을 얻는 경우에 더 나을 수 있습니다.







unordered-map