R
Razii
That's probably why he suggested using `multiset'.
By the way, have look at 2001 post where I used set...
http://groups.google.com/group/comp.lang.c++/msg/695ebf877e25b287
In that case, it didn't make a difference because bible.txt I was
using had verse numbers (so there could be no duplicates). A few here
(including Pete Becker from dinkumware) claimed that I used set and it
was unfair...
In any case, I can use multiset...
Time for reading, sorting, writing: 328 ms (c++)
Time for reading, sorting, writing: 312 ms (c++)
Time for reading, sorting, writing: 312 ms (c++)
Just a little improvement only...
For Java I can try TreeSet
http://java.sun.com/javase/6/docs/api/java/util/TreeSet.html
(which I asume does something similiar -- if not, any Java expert can
correct it).
Time for reading, sorting, writing: 359 ms
Time for reading, sorting, writing: 360 ms
Time for reading, sorting, writing: 359 ms
Not much changes here ...
------ c++-------
#include <fstream>
#include<iostream>
#include <string>
#include <set>
#include <algorithm>
#include <ctime>
using namespace ::std;
using namespace std;
void main()
{
multiset<string> buf;
string linBuf;
ifstream inFile("bible.txt");
clock_t start=clock();
while(getline(inFile,linBuf))
buf.insert(linBuf);
ofstream outFile("output.txt");
copy(buf.begin(),buf.end(),ostream_iterator<string>(outFile,"\n"));
clock_t endt=clock();
cout <<"Time for reading, sorting, writing: " << endt-start << "
ms\n";
}
-------- java -----------
import java.io.*;
import java.util.*;
public class IOSort
{
public static void main(String[] arg) throws Exception
{
Collection<String> ar = new TreeSet<String> ();
String line = "";
BufferedReader in = new BufferedReader( new
FileReader("bible.txt"));
PrintWriter out = new PrintWriter(new BufferedWriter(new
FileWriter("output.txt")));
long start = System.currentTimeMillis();
while (true)
{ line = in.readLine();
if (line == null)
break;
ar.add(line);
}
int size = ar.size();
for (String c : ar)
{
out.println(c);
}
out.close();
long end = System.currentTimeMillis();
System.out.println("Time for reading, sorting, writing: "+
(end - start) + " ms");
}
}