станд.:: различие в карте между индексом и вставляет вызовы

Вы захотите проверить анимационный jQuery () функция. Стандартный способ сделать это располагает элемент абсолютно и затем анимирует "левых" или "правильное" свойство CSS. Одинаково популярный путь состоит в том, чтобы увеличиться/уменьшить левое или правое поле.

Теперь, сказав это, необходимо знать о серьезной потере производительности для любого типа анимации, которая длится дольше, чем секунда или два. JavaScript не был просто предназначен для обработки долго, поддержан, медленные анимации. Это имеет отношение к способу, которым элемент DOM перерисовывается и повторно вычисляется для каждого "кадра" анимации. При выполнении анимации ширины страницы, которая длится больше чем пару секунд, ожидайте видеть скачок процессора на 50% или больше. Если Вы находитесь на IE6, готовитесь видеть, что Ваш компьютер спонтанно воспламеняется в пылающий шар некомпетентности браузера.

Для чтения на этом проверьте этот поток (из моего самого первого сообщения Stackoverflow не меньше)!

Вот является ссылка на документы jQuery для анимационного () функцией: http://docs.jquery.com/Effects/animate

12
задан TheOne 20 October 2009 в 13:32
поделиться

4 ответа

Я считаю, что insert () не перезапишет существующее значение, и результат операции можно проверить, проверив значение типа bool в возвращаемом значении итератора / пары

Присвоение оператор подстрочного индекса [] просто перезаписывает все, что там есть (вставляя запись, если ее еще нет)

Любой из операторов insert и [] может вызвать проблемы, если вы не ожидаете такого поведения и не учитываете его .

Например, с помощью insert:

std::map< int, std::string* > intMap;
std::string* s1 = new std::string;
std::string* s2 = new std::string;
intMap.insert( std::make_pair( 100, s1 ) ); // inserted
intMap.insert( std::make_pair( 100, s2 ) ); // fails, s2 not in map, could leak if not tidied up

и с оператором []:

std::map< int, std::string* > intMap;
std::string* s1 = new std::string;
std::string* s2 = new std::string;
intMap[ 100 ] = s1; // inserted
intMap[ 100 ] = s2; // inserted, s1 now dropped from map, could leak if not tidied up

Я думаю, что они верны, но не скомпилировали их, поэтому могут быть синтаксические ошибки

22
ответ дан 2 December 2019 в 04:17
поделиться

The insert method inserts into the map, while the overloaded index operator will return the element with the key key_value if it is in the map, if it is not already in the map then it will insert it.

0
ответ дан 2 December 2019 в 04:17
поделиться

В дополнение к тому, что map :: operator [] заменит существующее значение, это operator [] map :: will ] создать и добавить к карте существующее значение по умолчанию для замены до того, как произойдет замена (вызов ​​map :: operator [] () должен возвращать ссылку на что-то). Для элементов, создание которых связано с большими затратами, это может быть проблемой.

См. «Совет 24: Тщательно выбирайте между map :: operator [] и map :: insert , когда эффективность важно »в Эффективном STL Скотта Мейерса .

5
ответ дан 2 December 2019 в 04:17
поделиться

For a map, the former (operator[]) expression will always replace the value part of the key-value pair with the new supplied value. A new key-value pair will be inserted if one doesn't already exist.

In contrast, insert will only insert a new key-value pair if a key-value pair with the supplied key part does not already exist in the map.

8
ответ дан 2 December 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: