Форум программистов, компьютерный форум CyberForum.ru

Задача по теме карта (map) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
28.07.2012, 13:44     Задача по теме карта (map) #1
Условие:
Дан файл содержащий в каждой строке фамилию отца и имена детей.
Занесите все данные в карту где фамилия является ключом
Выведите имена всех детей в отдельный файл через пробел.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <sstream>
 
int main()
{
    // карта key - фамилия , value - имена детей
    std::map<std::string, std::vector <std::string> > child;
    // строка для фамилии при считывании из файла
    std::string fam;
    // вектор для имен детей
    std::vector <std::string> name;
 
    // связываем переменную с файлом
    std::ifstream map_zapolnenie;
    map_zapolnenie.open("input.txt");
    // переменная для считывания строки из файла
    //и последующего разбора по словам
    std::string line;
 
    // цикл разбора каждой строки входного файла
    // 1 слово записывается в fam - фамилия
    // все последующие в вектор имен
    while (std::getline(map_zapolnenie, line)) {
        std::istringstream stream(line);
        std::string word;
        stream >> fam;
        while (stream >> word) {
            name.push_back(word);
        }
        // результат записывается в карту
        child.insert(std::make_pair(fam, name));
    }
 
    // связывание переменой и файла вывода
    std::ofstream map_vivod;
    map_vivod.open("outout.txt");
 
    // итератор на начало карты
    std::map< std::string, std::vector<std::string> >::iterator iter=child.begin();
    while (iter != child.end()) {
        // вывод в файл только имен через пробел
        for (std::vector<std::string>::iterator vec=iter->second.begin(); vec != iter->second.end(); vec++) {
            map_vivod << *vec << " ";
        }
        ++iter;
    }
    //закрытие всех файлов
    map_zapolnenie.close();
    map_vivod.close();
 
    return 0;
}
цикл с 27 по 36 строку он почему то перепрыгивает

Входной файл содержит
Иванов Роман Михаил
Петров Алена Ира
Сидоров Галя
Рыбин Олег Костя Игорь
Выходной файл получается таким
Роман Михаил Роман Михаил Алена Ира Роман Михаил Алена Ира Галя Олег Костя Игорь Роман Михаил Алена Ира Галя
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2012, 13:44     Задача по теме карта (map)
Посмотрите здесь:

Задача по теме функции C++
C++ Разработка контейнера типа Карта (Map)
задача по теме массивы, циклы, условный оператор C++
Задача по теме Двумерные массивы C++
Map, карта в карте C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
28.07.2012, 13:58     Задача по теме карта (map) #2
Не знаю STL, но похоже понял в чём ошибка. Вы записываете имена в один и тот же вектор, то есть для второго сотрудника останутся имена детей первого и.т.д. Поэтому перед записью имен в вектор надо бы его очистить:

C++
1
2
3
4
5
6
7
// очистка
name.clear();
// а потом запись        
while (stream >> word) 
{
    name.push_back(word);
}
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
28.07.2012, 14:07  [ТС]     Задача по теме карта (map) #3
за это тоже спасибо, чет не заметил, но в этот цикл он даже не заходит почему то, если поставить
C++
1
while (!std::getline(map_zapolnenie, line))
то он зайдет, но строки из файла не считывает, поэтому после выхода из цикла все значения такие же как и если бы он его просто перепрыгнул
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
28.07.2012, 14:11     Задача по теме карта (map) #4
Цитата Сообщение от DaskOFF Посмотреть сообщение
но в этот цикл он даже не заходит почему то
Странно, у меня заходит, и в файл пишет, то что нужно...
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
28.07.2012, 14:11  [ТС]     Задача по теме карта (map) #5
вот шаг после цикла, все переменные пусты от куда он данные в файл записывает не понятно
Миниатюры
Задача по теме карта (map)  
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
28.07.2012, 14:36  [ТС]     Задача по теме карта (map) #6
вот выводить он выводит, а если задачу поставить по другому, чтобы он искал по ключу значения, то он ничего не находит

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <sstream>
 
int main()
{
    // карта key - фамилия , value - имена детей
    std::map<std::string, std::vector <std::string> > child;
    // строка для фамилии при считывании из файла
    std::string fam;
    // вектор для имен детей
    std::vector <std::string> name;
 
    // связываем переменную с файлом
    std::ifstream map_zapolnenie;
    map_zapolnenie.open("input.txt");
    // переменная для считывания строки из файла
    //и последующего разбора по словам
    std::string line;
 
    // цикл разбора каждой строки входного файла
    // 1 слово записывается в fam - фамилия
    // все последующие в вектор имен
    while (std::getline(map_zapolnenie, line)) {
        std::istringstream stream(line);
        std::string word;
        stream >> fam;
        name.clear();
        while (stream >> word) {
            name.push_back(word);
        }
        // результат записывается в карту
        child.insert(std::make_pair(fam, name));
    }
 
    // связывание переменой и файла вывода
    std::ofstream map_vivod;
    map_vivod.open("outout.txt");
 
    //Выводить в файл имена только тех, фамилию отца которых ввели
    //выход из цикла 1
    do {
    std::cout << "Fam na vivod: ";
    std::cin >> fam;
        if ((fam !="1") && (child.find(fam) != child.end())) {
            name.clear();
            name = child[fam];
            for(std::vector<std::string>::iterator it=name.begin(); it !=name.end(); it++) {
                map_vivod << *it << " ";
            }
            map_vivod << std::endl;
        }
    } while (fam != "1");
 
    //закрытие всех файлов
    map_zapolnenie.close();
    map_vivod.close();
 
    return 0;   
}
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
28.07.2012, 15:01     Задача по теме карта (map) #7
DaskOFF, а это заморочки с кириллицей. Попробовал имена заменить на латинские - работает.
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
28.07.2012, 15:09  [ТС]     Задача по теме карта (map) #8
Блин, я чет даже не задумывался, что в этом может быть ошибка, спасибо большое
-=ЮрА=-
Заблокирован
Автор FAQ
28.07.2012, 15:15     Задача по теме карта (map) #9
Вот и вся задача
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <map>
#include <string>
#include <fstream>
#include <iostream>
using namespace std;
 
int main()
{
    system("chcp 1251");//Руссифицируйте по совему это для простоты
    ifstream ifs;//Поток для чтения файла
    ofstream ofs;//Поток для записи файла
    map<string, string> mymap;//Наша карта
    map<string, string>::iterator it;//Итератор
    string fam;//Строка с фамилией
    string nam;//Строка с именами детей
    ifs.open("input.txt");
    if(!ifs.is_open())
        cout<<"Error open input.txt\n";
    else
    {
        //Цикл чтения
        cout<<"input.txt :\n";
        while(!ifs.eof())
        {
            if(getline(ifs,fam,' '))
            if(getline(ifs,nam,'\n'))
            {
                mymap.insert(make_pair(fam,nam));
                cout<<fam<<" "<<nam<<endl;
            }
        }
        ifs.close();//Закрыли поток чтения
        ofs.open("output.txt");
        if(!ofs.is_open())
            cout<<"Error open output.txt\n";
        else
        {
            cout<<"output.txt :\n";
            for (it = mymap.begin(); it != mymap.end(); it++)
            {
                ofs<<(*it).second<<" ";
                cout<<(*it).second<<" ";
            }
            cout<<endl;
            ofs.close();
        }
    }
    system("pause");
    return 0;
}
Миниатюры
Задача по теме карта (map)  
-=ЮрА=-
Заблокирован
Автор FAQ
28.07.2012, 15:23     Задача по теме карта (map) #10
Ниже небольшая абстракция того как всё работает
http://codepad.org/DTcFk7zd
-=ЮрА=-
Заблокирован
Автор FAQ
28.07.2012, 15:51     Задача по теме карта (map) #11
Тоже самое только для вектора string
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <map>
#include <string>
#include <vector>
#include <fstream>
#include <sstream>
#include <iostream>
using namespace std;
 
int main()
{
    system("chcp 1251");//Руссифицируйте по совему это для простоты
    ifstream ifs;//Поток для чтения файла
    ofstream ofs;//Поток для записи файла
    string fam;  //Строка с фамилией
    string name; //Строка с именем
    string line; //Строка с текущей линией из файла
 
    //Ладно предположим нам зачемто сюда ещё и вектор в карту потребовался
    map<string, vector<string> > mymap;//Наша карта
    map<string, vector<string> >::iterator itMap;//Итератор для карты
    vector <string> vec;//Вектор с именами детей
    vector <string>::iterator itVec; //Итератор для вектора
 
    stringstream ifs_ss;
    ifs.open("input.txt");
    if(!ifs.is_open())
        cout<<"Error open input.txt\n";
    else
    {
        //Цикл чтения
        cout<<"input.txt :\n";
        //Хорошо читаем файл построчно
        while(getline(ifs,line))
        {
            ifs_ss.sync();//Обязательно чистим буфер
            ifs_ss.str(line);
            ifs_ss>>fam;
            cout<<fam<<" ";
            //Я конечно не знаю зачем так сложно но ладно пусть будет с вектором
            while(ifs_ss>>name)
            {
                cout<<name<<" ";
                vec.push_back(name);
            }
            mymap.insert(make_pair(fam,vec));
            ifs_ss.clear();
            vec.clear();
            cout<<endl;
        }
        ifs.close();//Закрыли поток чтения
        ofs.open("output.txt");
        if(!ofs.is_open())
            cout<<"Error open output.txt\n";
        else
        {
            cout<<"output.txt :\n";
            for (itMap = mymap.begin(); itMap != mymap.end(); itMap++)
            {
                vec = (*itMap).second;
                for(itVec = vec.begin();itVec != vec.end(); itVec++)
                {
                    ofs <<(*itVec)<<" ";
                    cout<<(*itVec)<<" ";
                }
                vec.clear();
            }
            ofs.close();
            cout<<endl;
        }
    }
    system("pause");
    return 0;
}
Миниатюры
Задача по теме карта (map)  
-=ЮрА=-
Заблокирован
Автор FAQ
28.07.2012, 15:57     Задача по теме карта (map) #12
Абстракция здесь http://codepad.org/w5HeeqU3
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
28.07.2012, 16:00  [ТС]     Задача по теме карта (map) #13
ну эту я решил , а тут теперь надо чтобы с датой рождения было, и опять он все выдает правильно , а цикл обходит, хотя все на англ.
с вектором я решал, потому что так по условию, забыл дописать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <sstream>
#include <utility>
 
int main()
{
    // карта key - фамилия , value - имена детей
    std::map<std::string, std::vector<std::pair<std::string, std::string> > > child;
    // строка для фамилии при считывании из файла
    std::string fam;
    // вектор для имен детей
    std::pair<std::string, std::string> name_bithday;
    std::vector< std::pair < std::string, std::string > > name;
 
    // связываем переменную с файлом
    std::ifstream map_zapolnenie;
    map_zapolnenie.open("input.txt");
    // переменная для считывания строки из файла
    //и последующего разбора по словам
    std::string lines;
 
    // цикл разбора каждой строки входного файла
    // 1 слово записывается в fam - фамилия
    // все последующие в вектор имен
    while (std::getline(map_zapolnenie, lines)) {
        std::istringstream stream(lines);
        std::string word, bithday;
        stream >> fam;
        name.clear();
        while (stream >> word >> bithday) {
            name_bithday.first = word;
            name_bithday.second = bithday;
            name.push_back(name_bithday);
            
        }
        // результат записывается в карту
        child.insert(std::make_pair(fam, name));
    }
 
    // связывание переменой и файла вывода
    std::ofstream map_vivod;
    map_vivod.open("outout.txt");
 
    //Выводить в файл имена только тех, фамилию отца которых ввели
    //выход из цикла 1
    do {
    std::cout << "Fam na vivod: ";
    std::cin >> fam;
        if ((fam !="1") && (child.find(fam) != child.end())) {
            name.clear();
            name = child[fam];
            for(std::vector<std::pair< std::string, std::string> >::iterator it=name.begin(); it !=name.end(); it++) {
                map_vivod << it->first /* имя */  << " - " << it->second/* дата рождения*/ << " ";
            }
            map_vivod << std::endl;
        }
    } while (fam != "1");
 
    //закрытие всех файлов
    map_zapolnenie.close();
    map_vivod.close();
 
    return 0;   
}
Вход
Ivanov Roman 31.12.1991 Kolya 15.02.2001
Sidorov Alena 16.08.1989
Ribin Anna 25.06.1993 Petr 14.11.1998
Выход
Alena - 16.08.1989
Roman - 31.12.1991 Kolya - 15.02.2001
-=ЮрА=-
Заблокирован
Автор FAQ
28.07.2012, 16:03     Задача по теме карта (map) #14
DaskOFF, хорошо я сделаю и это, напиши пожалуйста полное задание к работе, чтобы сразу всё решать одним махомА вот решение с вектором см пост11
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
28.07.2012, 17:43  [ТС]     Задача по теме карта (map) #15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
DaskOFF, хорошо я сделаю и это, напиши пожалуйста полное задание к работе, чтобы сразу всё решать одним махомА вот решение с вектором см пост11
если не сложно лучше мой код подправить, а то я никак не могу понять почему сейчас обходит цикл и при этом выводит в файл все верно.

это сделано.
Определите карту, в которой ключ является фамилией отца, а значение - вектором имен детей. Заполните карту по крайней мере шестью элементами. Проверьте ее, предоставив пользователю возможность делать запросы на основании фамилии и получать список детей.
это сейчас
Усовершенствуйте карту из предыдущей задачи так, чтобы вектор хранил пары, содержащие имя ребенка и день его рождения. Измените проверку так, чтобы она позволяла проверить модернизированную карту
Добавлено через 1 час 27 минут
даже если просто вынести перед циклом команду
C++
1
std::getline(map_zapolnenie, lines);
lines - не заполняется
Schizorb
 Аватар для Schizorb
508 / 460 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
28.07.2012, 17:49     Задача по теме карта (map) #16
Цитата Сообщение от DaskOFF Посмотреть сообщение
lines - не заполняется
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <string>
#include <map>
 
int main()
{
    std::ifstream map_zapolnenie;
    map_zapolnenie.open("input.txt");
 
    std::string line;
 
    std::getline(map_zapolnenie, line);
    
    std::cout << line << "\n";
       
    return 0;
}
Разве так не считывает первую строку?
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
28.07.2012, 18:23  [ТС]     Задача по теме карта (map) #17
как ни странно, но нет

Добавлено через 26 минут
неужели никто не знает что может быть?
-=ЮрА=-
Заблокирован
Автор FAQ
28.07.2012, 18:32     Задача по теме карта (map) #18
Цитата Сообщение от DaskOFF Посмотреть сообщение
это сейчас
Усовершенствуйте карту из предыдущей задачи так, чтобы вектор хранил пары, содержащие имя ребенка и день его рождения. Измените проверку так, чтобы она позволяла проверить модернизированную карту
- Лови
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include <map>
#include <string>
#include <vector>
#include <utility>
#include <fstream>
#include <sstream>
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"RUS");//Руссификация 
    ifstream ifs;//Поток для чтения файла
    ofstream ofs;//Поток для записи файла
    string fam;  //Строка с фамилией
    string name; //Строка с именем
    string date; //Строка с датой
    string line; //Строка с текущей строкой из файла
 
    map<string, vector<pair<string, string>>> mymap;//Наша карта
    map<string, vector<pair<string, string>>>::iterator itMap;//Итератор для карты
    vector <pair<string,string>> vec;//Вектор с именами и датами рождения детей
    vector <pair<string,string>>::iterator itVec; //Итератор для вектора
 
    int iChoise= 0;//Будет отвечать за выбор пользователя
    bool bMenu = true;//флаг для меню вывода
    int nCount = 0;//Будет содержать число результатов удовлетворяющих запросу на поиск
    stringstream ifs_ss;
    ifs.open("input.txt");
    if(!ifs.is_open())
        cout<<"Error open input.txt\n";
    else
    {
        //Цикл чтения
        cout<<"input.txt :\n";
        while(getline(ifs,line))
        {
            ifs_ss.sync();//Обязательно чистим буфер
            ifs_ss.str(line);//Инициализируем стрнгпоток введенной строкой
            ifs_ss>>fam;cout<<fam<<" ";
            while(ifs_ss>>name>>date)
            {
                cout<<name<<" "<<date<<" ";
                vec.push_back(make_pair(name,date));
            }
            mymap.insert(make_pair(fam,vec));
            ifs_ss.clear();
            vec.clear();
            cout<<endl;
        }
        ifs.close();//Закрыли поток чтения
        ofs.open("output.txt");
        if(!ofs.is_open())
            cout<<"Error open output.txt\n";
        else
        {
            cout<<"output.txt :\n";
            while(bMenu)
            {
                cout<<"\t***MENU***\n";
                cout<<"1 - Enter Child name\n";
                cout<<"2 - Enter Child date\n";
                cout<<"0 - Exit\n";
                cout<<"Choise : ";cin>>iChoise;
                cin.sync();//чистим буффер ввода
                nCount = 0;//Обнуляем счётчик поиска
                switch(iChoise)
                {
                    case 1:
                        cout<<"Name : ";
                        getline(cin,name);
                        break;
                    case 2:
                        cout<<"Date : ";
                        getline(cin,date);
                        break;
                    case 0:
                        bMenu = false;
                        break;
                    default:
                        cout<<"Not spported key pressed\n";
                        break;
                }
                for (itMap = mymap.begin(); itMap != mymap.end(); itMap++)
                {
                    vec = (*itMap).second;
                    for(itVec = vec.begin();itVec != vec.end(); itVec++)
                    {
                            
                        if
                        (
                            iChoise == 1 ? (*itVec).first == name : 
                            iChoise == 2 ? (*itVec).second== date :
                            false
                        )
                        {
                            ofs <<(*itVec).first <<" "<<(*itVec).second<<" ";
                            cout<<(*itVec).first <<" "<<(*itVec).second<<" ";
                            nCount++;//Увеличиваем значение счётчика
                        }
                    }
                    vec.clear();
                }
                if((iChoise == 1 || iChoise == 2) && nCount == 0)
                    cout<<"Not found";
                cout<<endl;
            }
            ofs.close();
        }
    }
    system("pause");
    return 0;
}
В аттаче проект, экзешник и вход/выход файлы
Миниатюры
Задача по теме карта (map)  
Вложения
Тип файла: rar stdMap3.exe.rar (74.4 Кб, 3 просмотров)
Тип файла: rar stdMap3_VS9.0_proj.rar (4.9 Кб, 2 просмотров)
Тип файла: txt input.txt (105 байт, 2 просмотров)
Тип файла: txt output.txt (33 байт, 2 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2012, 19:06     Задача по теме карта (map)
Еще ссылки по теме:

C++ Как вставить map в map
Приведение map<int, B> к map<int, A> C++
C++ Задача по теме "Кондитерские изделия", классы

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DaskOFF
 Аватар для DaskOFF
112 / 112 / 9
Регистрация: 02.05.2012
Сообщений: 521
Записей в блоге: 1
28.07.2012, 19:06  [ТС]     Задача по теме карта (map) #19
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- Лови

В аттаче проект, экзешник и вход/выход файлы
спасибо, ща разберу что еще не знаю,
кстати нашел ответ на вопрос почему у меня обходил цикл.

Когда пошагово смотрел файл проверялся в другой папке
Лежал тут(где создается exe-шник программы) : D:\Developer\проекты C++\Second\Debug

а проверялся тут: D:\Developer\проекты C++\Second\Second

Но все равно спасибо, всем кто отозвался, программки разберу, посмотрю что не знаю
Yandex
Объявления
28.07.2012, 19:06     Задача по теме карта (map)
Ответ Создать тему
Опции темы

Текущее время: 06:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru