03. Exercises on Pointers, References and Dynamic Memory
Здравейте така и не успях да издокарам output-а на последната задача от домашното ето кода:
#include <iostream>
#include <string>
#include <sstream>
#include <list>
#include <conio.h>
#include <vector>
#include <map>
#include <iterator>
struct RANGE
{
RANGE(const int inputFrom, const int inputTo)
{
this->from = inputFrom;
this->to = inputTo;
}
int from;
int to;
};
inline bool isInRange(const std::map<int, RANGE*> &rangesFrom, const std::map<int, RANGE*> &rangesTo, const int value)
{
std::map<int, RANGE*>::const_iterator fromIt, toIt;
fromIt = rangesFrom.upper_bound(value);
if (fromIt == rangesFrom.begin())
{
return false;
}
--fromIt;
toIt = rangesFrom.lower_bound(value);
if (toIt == rangesFrom.begin())
{
return false;
}
if (toIt->first == fromIt->first)
{
return false;
}
return true;
}
int main()
{
std::vector<RANGE> ranges;
std::string input;
std::istringstream sstr;
int to(0), from(0), value(0);
std::map<int, RANGE*> mapFrom, mapTo;
std::ostringstream ostr;
while (true)
{
std::getline(std::cin, input);
if ("." == input)
{
break;
}
sstr.clear();
sstr.str(input);
sstr >> from >> to;
RANGE* curr = new RANGE(from, to);
mapFrom[from] = curr;
mapTo[to] = curr;
}
while (true)
{
std::getline(std::cin, input);
if ("." == input)
{
break;
}
sstr.clear();
sstr.str(input);
sstr >> value;
if (isInRange(mapFrom, mapTo, value))
{
ostr << "in" << '\n';
}
else
{
ostr << "out" << '\n';
}
}
std::cout << ostr.str();
for (auto it = mapFrom.begin(); it != mapFrom.end(); ++it)
{
delete it->second;
it->second = nullptr;
}
_getch();
return 0;
}
Вашето решение с вектори ми харесва повече, но все пак искам да подкарам и това с маповете.Една колежка от Facebook ми каза да направя същото което и Вие, но получавам debug assertion failed .... Experssion map/set incompatible line 275...
Просто замени функцията isInRange с тази, която ти дадох и трябва да мине.
Видях грешката, мерси!