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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> map 
:(
    Опции темы
box
Дата 14.2.2011, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



открываю процесс, считываю строковые данные, загоняю в ассоциативный массив .
вопрос : как на лету посчитать кол-во уникальных элементов массива ?
Код


int main()
{
map<char*, int> freq;
map<char*, int>::const_iterator iter;

    FILE * m_pipe = popen("/usr/local/bin/someproc", "r");
    int m_size = 80;
    char buf[m_size + 1];
    int i;
    while (fgets(buf, m_size, m_pipe) != NULL)
    {
      freq[buf]++;
    for (iter=freq.begin(); iter != freq.end(); ++iter) {
        cout << iter->second << " " << iter->first;
    }

}

}


делаю так , но вывод идет: порядковый номер  стринг 
а надо посчитать в потоке кол-во уникальных элементов типа как в перле когда загоняем в хеш:
Код

%hash = ();
$hash{$buf}++;







PM MAIL   Вверх
bsa
Дата 14.2.2011, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



box, по коду у тебя именно вывод:
<количество повторений строки> <строка>

Для каждой строки, полученной от приложения.
Если тебе нужно вывести количество уникальных, то ты должен вывести freq.size() после завершения while.
PM   Вверх
box
Дата 14.2.2011, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



мне надо именно в теле while ибо поток непрерывный 
PM MAIL   Вверх
boostcoder
Дата 14.2.2011, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(box @  14.2.2011,  17:45 Найти цитируемый пост)
char buf[m_size + 1];

Цитата(box @  14.2.2011,  17:45 Найти цитируемый пост)
fgets(buf

Цитата(box @  14.2.2011,  17:45 Найти цитируемый пост)
freq[buf]++;

т.е. вы один массив хотите использовать в качестве ключа многократно? smile 
PM WWW   Вверх
box
Дата 14.2.2011, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



переделал кое что , но желаемого результата все равно не достиг 
Код

int main()
{
map<char*, int> freq;
map<char*, int>::const_iterator iter;
    FILE * m_pipe = popen("/usr/local/bin/someproc", "r");
    int m_size = 80;
    char buf[m_size + 1];
    int i;
    while (fgets(buf, m_size, m_pipe) != NULL)
    {
      freq[buf]++;
if(i==100){
    for (iter=freq.begin(); iter != freq.end(); ++iter) {
        cout << iter->second << " " << iter->first;
    }
i=0;
}++i;

}
}

PM MAIL   Вверх
boostcoder
Дата 14.2.2011, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(box @  14.2.2011,  19:28 Найти цитируемый пост)
желаемого результата все равно не достиг

читайте постом выше.

Добавлено через 1 минуту и 57 секунд
Цитата(box @  14.2.2011,  19:28 Найти цитируемый пост)
if(i==100)

Цитата(box @  14.2.2011,  19:28 Найти цитируемый пост)
int i;

инициализировать, кто за вас будет? ;)
PM WWW   Вверх
box
Дата 14.2.2011, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



что инициализировать ? у меня вроде бы все инициализировано , по крайней мере ни компилятор ни сама прога не ругается 
PM MAIL   Вверх
586
Дата 14.2.2011, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

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



Цитата(box @  14.2.2011,  19:47 Найти цитируемый пост)
по крайней мере ни компилятор ни сама прога не ругается  

Это ни о чём не говорит.

Цитата(box @  14.2.2011,  19:47 Найти цитируемый пост)
у меня вроде бы все инициализировано

Не инициализирована переменная i. Она объявлена, но не инициализирована.


Цитата(box @  14.2.2011,  19:28 Найти цитируемый пост)
map<char*, int> freq;
map<char*, int>::const_iterator iter;

Напиши так:
Код
map<std::string, int> freq;
map<std::string, int>::const_iterator iter;


Цитата(box @  14.2.2011,  19:28 Найти цитируемый пост)
как на лету посчитать кол-во уникальных элементов массива ?

Через std::map, вызвав freq.size()
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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