i beginner trying bubble sort vector of objects in c++. goal sort vector member variables of each object element's member variable. in end, attributes off vector elements same, sorted in different order. when run program, following message:
here code:
void sortinventory(vector<vehicle> &carlist) { bool swap; vehicle temp; { swap = false; (int count = 0; count < carlist.size(); count++) { transform(carlist[count].getvin().begin(), carlist[count].getvin().end(), carlist[count].getvin().begin(), ::tolower); if (carlist[count].getvin() > carlist[count + 1].getvin()) { temp = carlist[count]; carlist[count] = carlist[count + 1]; carlist[count + 1] = temp; swap = true; } } } while (swap); }
here class declaration:
class vehicle { private: string vin; public: string getvin(); void setvin(string); };
here class implementation:
string vehicle::getvin() { return vin; } void vehicle::setvin(string input) { vin = input; }
by way, aware not using efficient methods, starting learn language , learning write code.
i asked question similar here. however, none of answers got me wanted go, although feel going in right direction.
as jxh says, transform line fails because making iterators separate string objects. why not try making transform separate routine? if want fancy can define inside sort routine lambda function. or can make separate routine defined separately.
// returns lower case version of string std::string lower_case(std::string vin_number){ auto begin = std::begin(vin_number); auto end = std::end(vin_number); // code acting on 1 fixed string std::transform(begin, end, begin, ::tolower); return vin_number; }
then when comparison, like
if ( lower_case(carlist[count].getvin()) > lower_case(carlist[count + 1]).getvin()) )