Здравствуйте, 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;
}