You mean, you've created a vector of strings with several elements filled with data strings (like "mi" and "gi"), and several strings are still empty. So when you go to sort it, you get something like "", "", "", "gi", "mi"? And you want "gi", "mi", without the empty strings?

The simplest way that comes to mind is to remove the empty strings first, and then sort it. Or you could remove them afterwards, I suppose. Or you could just process the vector starting at the first non-blank element after it was sorted.
Code:
#include <iostream>
#include <vector>
#include <string>

int main() {
    std::vector<std::string> data(5);
    std::vector<std::string>::iterator i;
    
    data[0] = "one";
    data[1] = "two";
    std::sort(data.begin(), data.end());
    
    for(i = data.begin(); i != data.end() && *i == ""; i ++);
    
    for( ; i != data.end(); i ++) {
        std::cout << '"' << *i << '"' << std::endl;
    }
    
    std::cin.get();
    return 0;
}
Output:
Code:
"one"
"two"
Or, even more simply (and this works for sorted and non-sorted vectors):
Code:
#include <iostream>
#include <vector>
#include <string>

int main() {
    std::vector<std::string> data(5);
    std::vector<std::string>::iterator i;
    
    data[0] = "one";
    data[1] = "two";
    std::sort(data.begin(), data.end());
    
    for(i = data.begin(); i != data.end(); i ++) {
        if(*i != "") std::cout << '"' << *i << '"' << std::endl;
    }
    
    std::cin.get();
    return 0;
}
The output is the same as above.

[edit] Or, even easier, see ZuK's reply above. [/edit]