Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> быстрый поиск, несложно, но срочно! Спасибо.. 
:(
    Опции темы
g-r-i-n
Дата 9.3.2004, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 12.12.2003
Где: Киев

Репутация: нет
Всего: 3



Коллеги, выручайте!
Моя программа реализована на Java, но узкое место нужно сделать в JNI. Я в нем (в С++) давно уже не трудился и не скоро буду, поэтому, если кому не жалко, черкните пару строк (желательно полностью рабочий класс):
из массива, скажем М, со строками одинаковой длины берется очередное значение и ищется в векторе V (изначально пустом). Если оно там есть, в другом векторе C элемент с этим же индеском инкрементируется. Если нету - новая строка добавляется в V а в С по тому же индексу ставится единица. Например исходные данные:
М: "018723" ; "738495"; "265833"; "738495"; "265833"; "738495";
Результат:
Код
V          С
"018723"  1
"738495"  3
"265833"  2

Порядок элементов значения не имеет.
Заранее благодарен..

P.s. Для меня вся трудность в итераторах и слежении за памятью (кстати массивы - в десятки мегабайт), я в С++ за себя не ручаюсь, потому и отвлекаю вас от дел ратных. Кроме того, из-за скромных размеров я использую компилятор Watcom, что, оказывается, тоже - специфика.
Если кому чего на Яве или J2ME надо будет - с удовольствием поделюсь smile.gif

Это сообщение отредактировал(а) g-r-i-n - 9.3.2004, 17:23
PM MAIL WWW ICQ   Вверх
Borisff2003
Дата 10.3.2004, 07:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 26.2.2004
Где: г. Уфа

Репутация: 1
Всего: 1



Как предполагается скрещиват С++ и Java?
Если напишешь какие параметры ту хочешь видеть в Функции , то возможно помогу.
Например так пойдет
Просто не совсем понятно что ты подразумеваешь по вектором и массивом
Вот примеры
char* M[];
string M[];
vector<char*> V;
vector<string> V;
int c[];
vector<int> C;
И вобще насколько я понял тебе надо использовать STL.

--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
g-r-i-n
Дата 10.3.2004, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 12.12.2003
Где: Киев

Репутация: нет
Всего: 3



Привет, Borisff2003
У меня уже Ява и С++ работают (через dll), просто вместо результата стоит заглушка. Смысл такой - приложение получает (либо генерирует, это не важно) массив данных (скорее всего сhar*, string это наверное класс, т.е. он "дороже") размера size, а обработанные данные он в Яву уже не пересылает, они все равно должны храниться в файле, вот оно их и сохраняет там. Ява потом, когда нужно сама эти данные достает. Все уже работает, нужна только функция быстрого поиска в большом наборе данных. Под вектором я понимаю класс, который есть в любом языке программирования, это не что-то особенное, но если это будет любая другая конструкция - ничего страшного, лишь бы потом можно было данные переписать в файл. Просто я так понимаю в С++ удобнее всего использовать упорядоченный вектор или хэш какой-нибудь. Формат записи в файл - нетривиальный, так что я его сам реализую.
В общем главное - это что массив char* [], а результат в любом виде, как удобней и эффективней, главное пару слов по поводу того, как достать потом это правильно и память освободить. И вообще, есть ли в С++ какой нибудь универсальный сборщик мусора, который подошел бы во всех случаях? Понимаю, что С++ это не Ява, но почему бы и нет?..
PM MAIL WWW ICQ   Вверх
Borisff2003
Дата 10.3.2004, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 198
Регистрация: 26.2.2004
Где: г. Уфа

Репутация: 1
Всего: 1



Код
#include <map>
#include <string>
using namespace std;

void Do(char* M[],int Count, map<string,int> &V){

int i;
map<string,int>::iterator p;
for(i=0;i<Count;i++){
 //ищем
 p=V.find(M[i]);
 if(p==V.end()){//не нашли такой
  V.insert(pair<string,int>(M[i],1));
 }
 else{
  p->second++;
 };
}

};


int main(int argc, char* argv[])
{
char *m[]=
{"1234",
"1234",
"1284",
"1734",
"1234",
"1234",
"1284",
"1734",
};
map<string,int> v;
map<string,int>::iterator p;
Do(m,8,v);
//это вывод на экран
for(p=v.begin();p!=v.end();++p)
 printf("%s,  %d\n",p->first.c_str(),p->second);
//p->first.c_str() строка в формате char*
//p->second  счетчик этой строки
return 0;
}



--------------------
Лень, двигатель прогресса
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.