hash_map использует хеш-таблицу. Это "постоянное" время в теории. В большинстве реализаций используется хеш-таблица "столкновения". На самом деле происходит следующее:
Теория состоит в том, что если у вас достаточно большая таблица, операции выполняются с постоянным временем, то есть оно не зависит от количества имеющихся у вас элементов. На практике, конечно, чем больше у вас элементов, тем больше столкновений.
std :: map использует двоичное дерево. Нет необходимости определять хеш-функцию для объекта, только строго упорядоченное сравнение. При вставке он перемещается вниз по дереву, чтобы найти точку вставки (и есть ли какие-либо дубликаты) и добавляет узел, и, возможно, потребуется перебалансировать дерево, чтобы глубина листьев никогда не превышала 1. Время перебалансировки также зависит от глубины дерева, поэтому все эти операции - O (log N), где N - количество элементов.
Преимущества хеширования - сложность. Преимущества дерева:
Еще одна проблема с std::map
состоит в том, что он использует одну строго упорядоченную функцию сравнения, в то время как функция «сравнения», которая возвращает -1, 0 или 1, будет намного более эффективной, особенно с наиболее часто встречающейся функцией. используемый тип ключа std :: string, в котором уже реализована эта функция (это char_traits::compare
). (Эта неэффективность основана на предпосылке, что для проверки того, что x==y
, вы проверяете x<y
и y<x
, так что вы делаете два сравнения. Вы сделали бы это только один раз за поиск).
Я часто использую комбинацию Grails + ExtJS, и ее довольно легко реализовать. Вывод JSON для сеток можно легко получить, выполнив что-то вроде этого в ваших контроллерах:
def list = {
def books = Book.list(params)
render( [ items: books, totalCount: Book.count() ] as JSON )
}
это создаст "Ext-совместимый" JSON, например:
{"items":[{"class":"Book","id":1,"title:"The Definitive Guide to Grails","author":"Graeme Rocher",...
это пример того, как вы должны инициализировать JsonStore:
var store = new Ext.data.JsonStore({
url: '${createLink( action: 'list' )}',
root: 'items',
totalProperty: 'totalCount',
fields: [ 'id','title','author','isdn', 'dateCreated' ],
paramNames: { start : "offset", limit :"max", sort : "sort", dir : "order" }
});
При работе со значениями даты рекомендуется использовать формат даты Javascript для конвертера JSON (т.е. значения даты будут отображаться как новая дата (123123123)
вместо формата по умолчанию «2009- 04-16T00: 00: 00Z "), поэтому вам не нужно беспокоиться о формате даты или часовом поясе. Вы можете сделать это, настроив его в вашем grails-app / conf / Config.groovy:
grails.converters.json.date = 'javascript'
Я также реализовал функциональность на стороне сервера для плагина фильтра сетки, различные комбинации реализаций поля со списком (с удаленным автозаполнением), деревьев, форм и т. д. Если вы хотите увидеть больше примеров кода для этого, дайте мне знать.
ExtJS 3.0 (в настоящее время RC) еще лучше интегрируется с Grails, поскольку хранилища данных предоставляют возможность отправлять данные обратно на серверную часть для сохранения. Подход Ext.Direct также предоставляет новые возможности: -)
См. Этот
http://ffzhuang.blogspot.com/2009/03/build-j2ee-application-with-extjs.html
Это хороший пример и весь сайт www.feyasoft.com работает под extjs + grails. А вы можете попробовать наш календарь - с открытым исходным кодом.