Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2016-05-25, 15:33
  #13
Medlem
Citat:
Ursprungligen postat av PG-k
Jag förstår fortfarande inte vad meningen med era lösningar är för tillfället, kanske har jag missuppfattat TS ursprungsfråga. Men om jag fattat rätt så vill han sortera strängarna i stigande ordning. Alltså kunna välja element vec[idx] och sortera den vektorn specifikt?

så vad är då problemet med t.ex

Kod:
sort(vec[0].begin(), vec[0].end(), compare);


Eller har jag missuppfattat allting?

Ja.

Han vill sortera en vector<vector<string>>, där de inre vektorerna ska jämföras sinsemellan baserat på valfritt index.
Citera
2016-05-25, 16:41
  #14
Medlem
enowens avatar
Citat:
Ursprungligen postat av chig
Ja.

Han vill sortera en vector<vector<string>>, där de inre vektorerna ska jämföras sinsemellan baserat på valfritt index.

Jag fattar ju inte vad killen snackar om men det känns som att han är ute efter detta:

Kod:
#include <iostream>
#include <vector>
#include <string>
#include <utility>
#include <algorithm>

std::vector<std::vector<std::string>> CreateVectorOfVectors()
{
    
int inc 0;
    
std::vector<std::vector<std::string>> vec_of_vec;
    for (
int i 05i++)
    {
        
std::vector<std::stringvec;
        for (
int x incinc+10; ++x)
        {
            
vec.push_back(std::to_string(x));
        }
        
vec_of_vec.push_back(std::move(vec));
        
inc+=10;
    }

    return 
vec_of_vec;
}

void PrintVector(const std::vector<std::vector<std::string>>& vec)
{
    for (
auto _vec vec)
    {
        for (
auto _str _vec)
        {
            
std::cerr << _str << " ";
        }
        
std::cerr << std::endl;
    }
}

int main()
{
    
auto vec CreateVectorOfVectors();
    
int column 4;
    
std::sort(
        
vec.begin(),
        
vec.end(),
        [&
column](const std::vector<std::string>& lhs, const std::vector<std::string>& rhs) -> bool {
        return 
lhs[column] < rhs[column];
    });
    
PrintVector(vec);

Citera
2016-05-25, 17:56
  #15
Medlem
Freedom Fighters avatar
Tack för all hjälp, jag har fått ordning på det nu.

Nu har dock ett nytt problem dykt upp (ovanligt )

Jag fyller vektorn genom att läsa från en textfil, med följande funktion

Citat:
void readDataFromFile(std::vector< std::vector<std::string> >& vec, string fileName)
{
int countColumns=0;
int countRows=0;
std::string line;
std::ifstream ifs;
ifs.open(fileName.c_str());
while (getline(ifs, line))
{
std::vector<std::string> tokens;
std::stringstream ss(line);
std::string token;
while (ss >> token)
{
tokens.push_back(token);
}
vec.emplace_back(tokens.size() ? std::move(tokens) : std::vector<std::string>(1));
}

vilket fungerar bra. Nu vill jag dock ändra funktionaliteten lite, så att indata sker från standard in och att man kan redirecta input från en fil, så här (från kommandoraden)

$ ./sort < sorteringsdata.txt


En mindre förändring av koden
Kod:
void readDataFromFile(std::vector< std::vector<std::string> >& vec)
{
	std::string line;
	while (getline(std::cin, line))
	{
		std::vector<std::string> tokens;
		std::stringstream ss(line);
		std::string token;
		while (ss >> token)
		{
			tokens.push_back(token);
		}
		vec.emplace_back(tokens.size() ? std::move(tokens) : std::vector<std::string>(1));
	}

Vektorn som skapats av den andra funktionen går däremot inte köra igenom sorteringsfunktionen utan att det blir core dump, något som går utmärkt med vektorn som fyllts av den första funktionen.

Vid utskrift på skärmen ser vektorerna identiska ut.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback