Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск повторений в таблице 
:(
    Опции темы
Гость_Shorr Kan
Дата 7.7.2005, 12:21 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











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

Продукция | Заказано | Изготовлено

Ворота | 5 | 1
Забор | 3 | 3
Ворота | 6 | 2



Так вот как мне выводить такое:

Ворота | 11 | 3
Забор | 3 | 3


  Вверх
vadims
Дата 7.7.2005, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Честно говоря я не знаток Visual C++/MFC/WTL и может там какие-то технологии более хитрые есть, но алгоритмически
1. упорядочить по индексу по полю "Продукция"
2. перебирать последовательно записи и считать


--------------------
Cpu not found ! Press any key for software emulation.
PM MAIL   Вверх
Step
Дата 7.7.2005, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

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



на стл

это структура которая запихиваеться в мап
Код

class mystruct{
public:
int a1;
int a2;
mystruct();
mystruct(int a_1, int a_2){
a1=a_1;
a2=a_2
}
add(int a_1, int a_2){
a1+=a_1;
a2+=a_2;
};
~mystruct();
}


это объявление мап в хеадере того класа где будешь использовать
Код

map<CString, mystruct> my;
map<CString, mystruct>::iterator myiter


name - это позиция
f - первое число
s - второе число
а вот этот код произветед тебе групировку с суммирование
Код

myiter=my.find(name);
if  (myiter==my.end()){
   my[name]=mystruct(f,s);
} else {
   my[name].add(f,s);
}





извини, проверить пока не начем....


если еще перегрузить операторы mystruct то получеться очень красиво, но я этого делать не буду так как проверять не начем...



--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
Earnest
Дата 11.7.2005, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



Если уж на stl, то так:

Код

// допустим, это данные, к-е хранятся в записи и которые нужно суммировать
struct _data
{
    int val1;
    int val2;
    //...
    _data(int v1=0,int v2=0): val1(v1),val2(v2) {} 
    const _data& operator += (const _data& x)
    {
        val1 += x.val1;
        val2 += x.val2;
        return *this;
    }
};

// а это твои записи
struct _record 
{
    CString  name;
    _data    data;
};

// функция суммирования, предполагается, что ITER разыменовывается в const _record&
template <class ITER>
void _accumulate(ITER first,ITER last)
{
    typedef std::map<CString,_data> _results;
    _results res;
    for ( ; first != last; ++first)
        res[first->name] += first->data;

    // теперь, скажем, печатаем
    for (_results::iterator it = res.begin(); it != res.end(); ++it)
        cout << it->first << it->second.val1 << it->second.val2;
}

// использование
void foo()
{
     // записи могут храниться в любом последовательном контейнере, да хоть в обычном массиве

    const int rec_nmb = 1000;
    _record* pr = new _record [rec_nmb];

    // как-то заполняем
    ...

   _accumulate(pr, pr+rec_nmb);
}


В общем, все как говорил Step


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


 




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


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

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