Включение soundex/metaphone для неанглийских символов

ответ litb точен. Время жизни временного объекта (также известный как rvalue) связывается с выражением, и деструктор для временного объекта называют в конце полного выражения и когда деструктор на StringBuffer назовут, деструктор на m_buffer также назовут, но не деструктор на m_str, так как это - ссылка.

Примечание, что C++ 0x изменяет вещи просто немного, потому что это добавляет rvalue ссылки и семантику перемещения. По существу при помощи rvalue параметра ссылки (записанный нотами с & &) я могу 'переместить' rvalue в функцию (вместо того, чтобы копировать его), и время жизни rvalue может быть связано с объектом, который это перемещает в, не выражение. Существует действительно хорошее сообщение в блоге от команды MSVC на этом обходы через это в мельчайших подробностях , и я поощряю людей читать его.

педагогическим примером для движущегося rvalue's являются временные строки, и я покажу присвоение в конструкторе. Если у меня есть класс MyType, который содержит строковую членскую переменную, он может быть инициализирован с rvalue в конструкторе как так:

class MyType{
   const std::string m_name;
public:
   MyType(const std::string&& name):m_name(name){};
}

Это хорошо потому что, когда я объявляю экземпляр этого класса с временным объектом:

void foo(){
    MyType instance("hello");
}

то, что происходит, - то, что мы стараемся не копировать и уничтожать временный объект, и "привет" помещается непосредственно в членской переменной экземпляра класса владения. Если объект является более тяжелым весом, чем 'строка' тогда, дополнительная копия и вызов деструктора могут быть значительными.

14
задан ire_and_curses 14 September 2009 в 07:37
поделиться

2 ответа

Я не эксперт в этой области, но ваши требования кажутся мне довольно сложными. Soundex был специально разработан для английских звуков, а также символов. Я не думаю, что он будет хорошо работать с неанглийскими языками. См., Например, ответы на этот связанный вопрос .

Double-Metaphone - это попытка иметь дело с гораздо более сложными вариациями, чем Soundex или Metaphone, и был разработан для обработки отклонений в диапазоне языков. Этого может быть достаточно для ваших нужд. Список реализаций библиотек приведен на странице, по которой есть ссылки.

Поддержка других языков в Lucene основана на концепции Analyzers . Lucene поставляется с набором анализаторов для разных языков (хотя я не смог найти список по умолчанию),

15
ответ дан 1 December 2019 в 14:11
поделиться

В Википедии есть несколько хороших ссылок, начиная со статьи Soundex . Я не знаю, существуют ли существующие библиотеки, предназначенные для работы с таким большим количеством языков.

0
ответ дан 1 December 2019 в 14:11
поделиться
Другие вопросы по тегам:

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