Re[3]: map,vector,sync
От: AlexGin Беларусь  
Дата: 10.05.17 10:08
Оценка: 2 (1)
Здравствуйте, GraKon, Вы писали:

GK>vector = {0,2,8,3,7}

GK>map = {(0,5),(1,7)(2,9)(3,8)(4,6))

GK>result

GK>vector = {8,7}
GK>map = {(1,7),(3,8))

Может вот так:
#include "stdafx.h"
#include <map>
#include <vector>
#include <algorithm>
using namespace std;

void sync(std::map<int, int> *map1, std::vector<int>* vec1)
{
    std::map<int, int>::iterator it = map1->begin();
    std::map<int, int>::iterator endIter = map1->end();
    int cnt = 0;
    for (; it != endIter; )
    {
        if (find(vec1->begin(), vec1->end(), it->second) == vec1->end()) {
            it = map1->erase(it);
            cnt++;
        }
        else {
            ++it;
        }

    }
    for (std::vector<int>::iterator vi = vec1->begin(); vi != vec1->end(); )
    {
        bool bFlag = false;
        for (auto& pair : *map1)
        {
            if (pair.second == *vi)
            {
                bFlag = true;
                break;
            }
        }
        if (!bFlag)
        {
            vi = vec1->erase(vi);
            cnt++;
        }
        else
            vi++;
    }

}


int main()
{
    vector<int> vectInt{ 0,2,8,3,7 };
    map<int, int> mapInt;
    mapInt[0] = 5;
    mapInt[1] = 7;
    mapInt[2] = 9;
    mapInt[3] = 8;
    mapInt[4] = 6;
    sync(&mapInt, &vectInt);

    return 0;
}
Отредактировано 10.05.2017 10:09 AlexGin . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.